在不引用自身的情况下获取 ClassName

Get ClassName without referencing self

我想用默认的 nib 名称初始化一个 UIViewController subclass。我能想到的唯一方法是获取当前 class 名称。但是要做到这一点,我需要引用自己,并且在调用 super.initWithNib.

之前是不可能的
    init(managedObject: NSManagedObject){
        let className = PSOClassNameFor(self) /// ERROR -> Cannot reference self

        self.managedObject = managedObject
        super.init(nibName:className, bundle: nil)
    }

我不知道 class 的实际名称,因为这是一个具有多个子 class 的抽象 class。

还有其他加载默认 nibName 的方法吗?

这些是正在播放的两个文件:

当我尝试使用 nil nibName 进行初始化时,它会加载黑屏。

 init(){
    super.init(nibName: nil, bundle: nil)
}

当我指定笔尖名称时,它按预期工作:

    init(){
    super.init(nibName: "EntityCardViewController", bundle: nil)
}

也许我遗漏了一些明显的东西,但这在 Xcode 6.4/Swift 1.2:

中运行良好
import CoreData
class MySubVC: UITableViewController {
    init(managedObject: NSManagedObject){
        let className = self.dynamicType.description()
        println(className) // Project_Name.MySubVC; not so bad; easily parsed
        super.init(nibName: className, bundle: nil)
    }

    required init!(coder aDecoder: NSCoder!) {
        super.init(coder: aDecoder)
    }
}

对于Swift 3:

    init() {
        super.init(nibName: String(describing: type(of: self)), bundle: nil)
    }