2016-02-03 49 views
0

获取类名作为一个String有没有什么办法让类名作为初始化字符串进行调用super.init有没有办法在指定初始化

之前,我想为NSManagedObject的子类创建init方法等等我不需要每次都创建实体。这个CoreDataManagedObject是一个抽象类,我所有的ManagedObject都需要从它继承。现在我怎么能在init()中以String的形式获取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之前使用自所以我不知道是否有在初始化另一种方式()来获取是要去创建该对象的信息。如果我创建公司对象,我只想要entityName =“公司”。

+0

肯定是有一些解决方案,使您无法super.init之前使用的类名,但如果你想这样做的解决方案之一可以是在任何类中拥有一个具有className的属性,并且可以从init中访问它: class CoreDataManagedObject:NSManagedObject var name =“CoreDataManagedObject” init(){ let entityName = name } } 类公司:CoreDataManagedObject {VAR = nameN “本公司” 覆盖变数名称:字符串{ 获得{ 回报nameN } 集合{ nameN = NEWVALUE }} } –

回答

0

你可以做到这一点使用的协议,但你必须把它添加到你的所有实体类:

protocol CoreEntityClass 
{ 
    init(forEntity:String) 
} 

extension CoreEntityClass 
{ 
    init() 
    { 
    self = Self(forEntity:"\(Self.self)") 
    } 
} 

class CoreDataManagedObject:NSManagedObject 
{ 
    required init(forEntity entityName:String) 
    { 
    let entity = NSEntityDescription.entityForName(entityName, inManagedObjectContext: coreDataStack.context)! 
    super.init(entity: entity, insertIntoManagedObjectContext: coreDataStack.context) 
    } 
} 


class Company:CoreDataManagedObject, CoreEntityClass 
{ 
    //... 
} 
相关问题