【发布时间】:2020-05-04 13:25:48
【问题描述】:
通常,当我需要将新对象插入CoreData的NSManagedObjectContext时,我必须按以下方式进行:
let device = NSEntityDescription.insertNewObject(forEntityName: "Device", into: context) as! Device
device. .....// call methods on "device"
但是,由于.insertNewObject(forEntityName: 的返回类型不是类型安全的并且需要强制转换,因此它使过程容易出错。此外,如果要重构该类,则不会获取 entityName 参数,这使其成为真正难以追踪的运行时错误的潜在来源。
我有兴趣使用一种类型更安全的方法来最大程度地降低程序员出错的风险,例如通过为整个 Swift 模块引入以下扩展:
import CoreData
extension NSManagedObject {
class func insert(in context: NSManagedObjectContext) -> Self {
return NSEntityDescription.insertNewObject(forEntityName: String(describing: self), into: context) as! Self
}
}
引入这个扩展后,调用处的代码如下:
let device = Device.insert(in: context)
device. .....// call methods on "device"
如果Device类被重命名,方法参数entityName也会相应改变。
这种方法有任何潜在的限制吗?
【问题讨论】:
标签: ios swift core-data nsmanagedobject nsmanagedobjectcontext