Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用泛型返回特定类型NSManagedObject的所有对象?_Ios_Swift_Magicalrecord - Fatal编程技术网

Ios 如何使用泛型返回特定类型NSManagedObject的所有对象?

Ios 如何使用泛型返回特定类型NSManagedObject的所有对象?,ios,swift,magicalrecord,Ios,Swift,Magicalrecord,这就是我需要实现的目标: extension NSManagedObject { class func all<T: Self>(in context: NSManagedObjectContext) -> [T] { //error: Expected a class type or protocol-constrained type restricting ' return mr_findAll(in: context) as! [T] }

这就是我需要实现的目标:

extension NSManagedObject {
    class func all<T: Self>(in context: NSManagedObjectContext) -> [T] { //error: Expected a class type or protocol-constrained type restricting '
        return mr_findAll(in: context) as! [T]
    }
}
有可能吗


Person
Hotel
继承自
NSManagedObject

由于提取请求已经是通用的,这只能通过协议扩展和相关类型来实现,没有任何类型转换或注释,
NSManagedObject
扩展无法工作

protocol Managed
{
    associatedtype ManagedType: NSManagedObject = Self
    static var entityName : String { get }
    static func all(in context: NSManagedObjectContext) throws -> [ManagedType]
}

extension Managed where Self : NSManagedObject {
    static var entityName : String { return String(describing:self) }

    static func all(in context: NSManagedObjectContext) throws -> [ManagedType] {
        let request = NSFetchRequest<ManagedType>(entityName: entityName)
        return try context.fetch(request)
    }
}

看一看。好的,我如何使人员符合
管理的
?;)在声明行:
class-Person:NSManagedObject,Managed{…
你是天才;)我会为此给你买一杯酒;)神奇的东西…可以根据我的需要工作;)对不起,我恢复了编辑,因为我不同意一些坏习惯(强制展开、蛇形变量名和不必要的类型转换).好的,没问题…我完全同意你的看法。但这是来自第三方库(MagicalRecord),并且问题被标记为…;)强制展开也很糟糕…谢谢你的帮助。
protocol Managed
{
    associatedtype ManagedType: NSManagedObject = Self
    static var entityName : String { get }
    static func all(in context: NSManagedObjectContext) throws -> [ManagedType]
}

extension Managed where Self : NSManagedObject {
    static var entityName : String { return String(describing:self) }

    static func all(in context: NSManagedObjectContext) throws -> [ManagedType] {
        let request = NSFetchRequest<ManagedType>(entityName: entityName)
        return try context.fetch(request)
    }
}
let persons = Person.all(in: context)
let hotels = Hotel.all(in: context)