当继承UIViewController
(和其他类似的类)时,我们不必处理任何初始化,所以如果我创建一个不是可选的存储属性,Xcode会抱怨没有初始化器。
那么如何在这些类中创建一个非可选的商店属性?还是我应该?
答案 0 :(得分:4)
您有两个选择:
将其内联初始化
var myProp = MyClass()
将其声明为隐式解包可选:
var myProp: MyClass!
并在视图控制器中的任何位置初始化它 - 通常在viewDidLoad
中。这是通常用于网点的模式,也是我容忍隐式解包的少数情况之一
答案 1 :(得分:3)
使用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`
作为一个懒惰的var,myFoo
将在第一次使用时被赋予其初始值。