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

时间:2015-03-07 11:32:26

标签: swift optional

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

那么如何在这些类中创建一个非可选的商店属性?还是我应该?

2 个答案:

答案 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将在第一次使用时被赋予其初始值。