如何为 UIViewController 自定义子类创建非可选存储属性

How to create Non-optional stored properties for UIViewController Custom Subclass

当子类化 UIViewController(和其他类似的 类 )时,我们不必处理任何初始化,所以如果我创建一个存储的 属性 不是可选的,Xcode 会抱怨没有初始化器。

那么如何在这些 类 中创建非可选商店 属性?或者我应该?

您有 2 个选择:

  • 内联初始化

    var myProp = MyClass()
    
  • 将其声明为隐式解包可选:

    var myProp: MyClass!
    

    并在视图控制器中的任何位置初始化它 - 通常在 viewDidLoad 中。这是插座常用的模式,也是我容忍隐式展开的少数情况之一

lazy定义属性。

lazy var myFoo : Foo = Foo()

或者,如果您需要做一些设置 myFoo

lazy var myFoo : Foo = {
  // Code to create myFoo
  let foo = Foo(...)
  // modify foo if you need to
  return foo
}()     // <== this is a function call; returns the configured `myFoo`

作为惰性变量,myFoo在第一次使用时会被赋予初始值。