如何为 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
在第一次使用时会被赋予初始值。
当子类化 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
在第一次使用时会被赋予初始值。