我经常在UIViewController
中使用便捷初始化来创建自定义初始化程序。
但是我不知道在UIViewController
时会调用什么现有的self.init()
初始化程序。
是public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)
吗?
在self.init()
的方便初始化中UIViewController
被称为什么?
final class SampleViewController: UIViewController {
private var component: Component?
convenience init(component: Component) { // Custom initializer
self.init() // What is this initializer?
self.component = component
}
override func viewDidLoad() {
...
}
...
}
答案 0 :(得分:3)
UIViewController.init
呼叫UIViewController.init(nibName: nil, bundle: nil)
。这意味着nibName
将等于类的名称,并且包将成为主包。
UIViewController.init
只是一个便捷的初始化程序。很快可以使用默认参数UIViewController.init(nibName: String? = nil, bundle: NSBundle? = nil)
来实现,但这是一个旧的Objective-C API,而Objective-C没有默认参数,这就是为什么init()
有单独的便利之处。
答案 1 :(得分:-1)
这取决于UIViewController
的实例化方式。
通过代码直接调用时可能是init(nibName: String?, bundle: Bundle?)
,如果是通过Interface Builder机制(Storyboard Segue,Main View Controller等)实例化的,则可能是init?(coder: NSCoder)
答案 2 :(得分:-1)
UIViewController是来自UIResponder的NSObject ...
在NSObject中,您有一个没有参数的init,它只是实例化内存...
提示:总是CMD +如果发现有些奇怪的内容,请点击课程...并扎根。