【问题标题】:What initializer called in convenience init of UIViewController?UIViewController 的便捷初始化中调用了什么初始化程序?
【发布时间】:2019-06-16 00:26:46
【问题描述】:

我经常在UIViewController 中使用便捷的init 来制作自定义初始化器。

但我不知道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() {
       ...
    }
    ...
}

【问题讨论】:

    标签: swift uiviewcontroller initializer


    【解决方案1】:

    UIViewController.init 调用 UIViewController.init(nibName: nil, bundle: nil)。这意味着 nibName 将等于类的名称,并且 bundle 将是主 bundle。

    UIViewController.init 只是一个方便的初始化器。很快,这可以使用默认参数UIViewController.init(nibName: String? = nil, bundle: NSBundle? = nil) 实现,但这是一个旧的Objective-C API,Objective-C 没有默认参数,这就是为什么有一个单独的便利init()

    【讨论】:

    • 我明白了。谢谢。
    【解决方案2】:

    这取决于UIViewController 的实例化方式。

    如果通过代码直接调用它可能是init(nibName: String?, bundle: Bundle?),如果通过接口生成器机制(Storyboard Segue、主视图控制器等)实例化,则可能是init?(coder: NSCoder)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      相关资源
      最近更新 更多