【发布时间】:2018-06-08 09:41:19
【问题描述】:
所以,我想在 NSManagedObject 扩展上编写一个通用函数来创建一个新对象。
public extension NSManagedObject {
class var entityName: String {
var name = NSStringFromClass(self)
name = name.components(separatedBy: ".").last!
return name
}
class func create<T>() -> T {
guard let entityDescription = NSEntityDescription.entity(forEntityName: T.entityName, in: CoreDataManager.tripregi.managedObjectContext) else { fatalError("Unable to create \(T.entityName) NSEntityDescription") }
guard let object = NSManagedObject(entity: entityDescription, insertInto: CoreDataManager.tripregi.managedObjectContext) as? T else { fatalError("Unable to create \(T.entityName) NSManagedObject")}
return object
}
}
当我尝试如下使用它时:
let employee = User.create() //FYI:User is a core data entity
employee.name = "The Dude"
我在扩展程序中收到以下错误
类型“T”没有成员“entityName”
User.create() 部分出现以下错误:
无法推断通用参数“T”
我可以通过在扩展中指定 T:NSManagedObject 来解决这个问题,但是该类不再是 User 类并且不再具有属性名称......
我缺少由“User.create()”创建的“用户”类型的“NSManagedObject”?
【问题讨论】:
标签: ios swift generics core-data swift4