通常,当我需要在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
也将相应地更改。
这种方法是否有潜在的局限性?