在不引用自身的情况下获取 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)
}
我想用默认的 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)
}