【发布时间】:2016-02-03 11:58:05
【问题描述】:
在调用 super.init 之前,有什么方法可以在 init 中将类名作为 String 获取
我想为 NSManagedObject 的子类创建 init 方法,所以我不需要每次都创建实体。这个 CoreDataManagedObject 是一个抽象类,我所有的 ManagedObject 都需要从它继承。现在如何将 init() 中的 className 作为字符串获取?
class CoreDataManagedObject: NSManagedObject {
init() {
let entityName = <get class name here as a String>
let entity = NSEntityDescription.entityForName(entityName, inManagedObjectContext: coreDataStack.context)!
super.init(entity: entity, insertIntoManagedObjectContext: coreDataStack.context)
}
}
class Company: CoreDataManagedObject {
}
我不能在 super.init 之前使用 self ,所以我想知道 init() 中是否有另一种方法来获取要创建哪个对象的信息。如果我正在创建 Company 对象,我只想创建 entityName = "Company"。
【问题讨论】:
-
肯定有一些解决方案,阻止你在 super.init 之前使用类名,但如果你想这样做,其中一种解决方案可以是在你的任何类中都有一个带有 className 的属性拥有,然后从 init 访问它: class CoreDataManagedObject: NSManagedObject { var name = "CoreDataManagedObject" init() { let entityName = name } } class Company: CoreDataManagedObject { var nameN = "Company" override var name: String { get { return nameN } 设置 { nameN = newValue } } }
标签: initialization swift2