Swift init具有明确分离功能

时间:2015-12-14 12:37:39

标签: swift

在ObjC中,我曾经在我的init中调用类似

的东西
- init() {
[self initView1]
[self initView2]
}

分隔视图的设置

但是在swift中我无法在设置任何变量之前调用函数,是否有我遗漏的东西或者它不可能?

2 个答案:

答案 0 :(得分:1)

您可以在声明行中指定初始值:

class MyClass {
    var prop1: String = ""
    var prop2: String = ""

    init() {
        self.initView1()
        self.initView2()
    }

    func initView1() {
        self.prop1 = "Hello"
    }

    func initView2() {
        self.prop2 = "World"
    }
}

或者,通过添加感叹号(!)使它们隐式展开选项:

    var prop1: String!
    var prop2: String!

这告诉编译器程序员已经保证在使用之前将这些属性正确初始化。

答案 1 :(得分:0)

在Swift中,必须先初始化每个属性,然后才能调用方法。

这在Swift编程语言手册的Two-Phase Initialization章节中有详细描述。

如果要将初始化委托给方法,那么至少必须先提供一些虚拟值。

或者,您可以重构代码以从静态方法创建视图(如果可能的话);然后你可以使用这些对象进行初始化:

class MyClass {
  let prop1: String
  let prop2: String

  static func create1() -> String {
    return "Hello"
  }

  static func create2() -> String {
    return "World"
  }

  init() {
    prop1 = Blah.create1()
    prop2 = Blah.create2()
  }
}