2014-06-18 219 views
0

在Swift上有一个简单的问题。我有一个简单的基类基地和子类ABASE:线在ABASE我的init电话:ios swift初始化未初始化的实例变量

class Base { 
    var test1:Int 

    init(forTest test1:Int) { 
     self.test1 = test1 
    } 
} 

class ABase : Base { 
    var test3:Int 

    init(forAnother test3:Int) { 
     **super.init(forTest: test3)** 
     self.test3 = test3 
    } 
} 

我在super.init(TEST3 forTest)得到一个编译错误。错误是:

属性'self.test3'没有在super.init调用初始化。

我想了解为什么我不能在Swift中初始化一个未初始化的var对象?

回答

2

Swift有一个两阶段的初始化,其中你需要在做任何事情之前初始化所有的成员。

init(forAnother test3:Int) { 
    self.test3 = test3 
    super.init(forTest: test3) 
} 

此处了解详情:

https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/Initialization.html

搜索页面上的两相初始化。

如果你需要调用super.init()(例如,如果test3依赖于它做了什么),你可以在它的声明中给test3一个初始值。