我们假设我正在创建名为UIViewController
的{{1}}自定义子类。
我想以编程方式向其添加属性ViewController
。
我应该var textField: UITextField!
隐式展开的可选项并在textField
初始化它吗?
答案 0 :(得分:0)
不,尽可能避免隐式解包的选项。您应该使用隐式展开的选项的唯一时间是在视图控制器初始化期间不能进行初始化。这在以下情况下很常见:
当您使用隐式展开的选项时,您将失去Swift添加的某些保护。最重要的是,在使用之前,您将失去编译器强制初始化属性。
答案 1 :(得分:0)
loadView
初始化它,而不是viewDidLoad:
。lazy
变量来避免子视图的选项,同时有效地将初始化推迟到loadView
,或者在调用loadView
之前引用属性时,这会将我们带到:< / LI>
loadView
之前,完全可以访问其中一个,因此它们应该是真正的选项。类型和空安全性重要。声明一个这样的惰性变量:
private(set) lazy var imageView = UIImageView(...)
作为第三点的简单参考:
let imageViewController = ImageViewController()
imageViewController.imageView.image = ...
如果隐式展开imageView而不是延迟非可选,则会崩溃。