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)