Core data 从初始值设定项引用类级属性
我有一个Core data 从初始值设定项引用类级属性,core-data,swift,Core Data,Swift,我有一个NSManagedObject子类,其初始值设定项如下: class Item: NSManagedObject { convenience init(managedObjectContext: NSManagedObjectContext) { let entityDescription = NSEntityDescription.entityForName(preferredEntityName, inManagedObjectContext: manage
NSManagedObject
子类,其初始值设定项如下:
class Item: NSManagedObject {
convenience init(managedObjectContext: NSManagedObjectContext) {
let entityDescription = NSEntityDescription.entityForName(preferredEntityName, inManagedObjectContext: managedObjectContext)
...
}
class var preferredEntityName: String {
fatalError("This property must be overridden.")
}
}
编译器说项
没有名为preferredEntityName
的成员。我知道我可以将它引用为Item.preferredEntityName
,但在这种情况下,它对子类不起作用
我如何从初始值设定项中引用
preferredEntityName
,使其也适用于Item
的子类?我简化了Item
类:
class Item {
init(entityName: String) {
// Do whatever you want with the entityName
// Do other common code for all Items
}
class var preferredEntityName: String {
fatalError("This property must be overridden.")
}
}
在子类中,设置后只需传递preferredEntityName
:
class ShoppingCartItem: Item {
var preferredEntityClass = "ShoppingCartItem"
init() {
super.init(entityName:preferredEntityClass)
}
}
由于Swift没有抽象概念,所以最接近的方法是使用协议:现在,这不是很有帮助。为什么我不能在调用
super.init()
之前引用一个类属性?哦,很抱歉……你能告诉我你想用这个项目类实现什么吗?您有一个未在此类中实现的属性,并且希望子类实现它。当您在Item类中运行init时,您希望为preferredEntityName打印什么?很抱歉,我不清楚。我已经编辑了这个问题,并试图更具体一些。基本上,我希望每个子类都有自己的实体名称并继承初始值设定项,而不需要一次又一次地重新实现它。只要在子类中有一个init,该子类调用以preferredEntityName作为参数的Item类init方法。子类将不会有任何其他代码,它只是提供preferredEntity的值,而preferredEntity在Item类上下文中没有任何值,因为它没有在那里初始化。我已经更新了上面的代码。