在ObjC中,我曾经在我的init中调用类似
的东西- init() {
[self initView1]
[self initView2]
}
分隔视图的设置
但是在swift中我无法在设置任何变量之前调用函数,是否有我遗漏的东西或者它不可能?
答案 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()
}
}