swift - UIViewController 的便利 init 中调用了什么初始化程序?

标签 swift uiviewcontroller initializer

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

但我不知道在 self.init() 时调用了 UIViewController 的现有初始化程序。

public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)吗?

UIViewController 的便捷初始化中 self.init() 时会调用什么?

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() {
       ...
    }
    ...
}

最佳答案

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

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

关于swift - UIViewController 的便利 init 中调用了什么初始化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54309882/

相关文章:

ios - 如何按照给定的方式为 uinavigationbar 设置确切的颜色,我需要在下面

ios - 如何在 tableview Custom Cell 上为 UIView 的左上角和右上角设置圆角半径?

ios - 保存 UIViewController 并在需要时再次显示

swift - UIViewController 生命周期

c# - Unity C# 脚本字典初始化程序不是 C# 4.0 语言规范的一部分

swift - 如何创建由 CVPixelBuffer 支持的 MTLTexture

ios - 如何将数据从 View Controller 传递到相应的 UICollectionView 单元格?

ios - 从 UIViewController 中删除我的自定义 MKMapView

java - Kotlin 中的静态初始化 block

tensorflow - 如何在 Keras 中设置内核初始化程序 (glorot_uniform) 的种子值