有没有办法在指定的初始化程序中将类名称作为String获取

时间:2016-02-03 11:58:05

标签: initialization swift2

在调用super.init

之前,有没有办法在init中将类名称作为String

我想为NSManagedObject的子类创建init方法,所以我不需要每次都创建实体。这个CoreDataManagedObject是一个抽象类,我所有的ManagedObject都需要继承它。现在我怎样才能将init()中的className作为String?

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()中是否还有另一种方法来获取将要创建哪个对象的信息。如果我正在创建公司对象,我只想要entityName =&#34;公司&#34;。

1 个答案:

答案 0 :(得分: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 
{
  //...
}