扩展的静态函数的派生类型

Derive type for extension's static func

我想制作一个方法 return 特定 class 的所有 NSManagedObject 作为扩展:

extension NSManagedObject {
   static func getAll() -> [NSManagedObject]? {
       // code
   }
}

如何指定 returned 对象的确切类型?因此,对于 class 动物,我可以在下一个示例中推断类型:

let animals = Animal.getAll() // I want to animals already be [Animal]?, not [NSManagedObject]?

您要以相同的方式获取所有对象吗?如果是这样,你可以这样试试:

import UIKit
import CoreData

protocol AllGettable {
    associatedtype GetObjectType
    static func getAll() -> [GetObjectType]?
}

extension AllGettable {
    static func getAll() -> [Self]? {
        return []/* fetch your objects */ as? [Self]
    }
}

class Animal: NSManagedObject, AllGettable {}

let animals = Animal.getAll()