对Swift有一个简单的问题。我有一个简单的基类Base和一个子类ABase:
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
}
}
我在ABase的init调用中的super.init(forTest:test3)行上收到编译器错误。错误是:
属性'self.test3'不在super.init调用中初始化。
我试图理解为什么我不能在Swift中使用未初始化的var来初始化对象?
最佳答案
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的声明中为其赋予一个初始值。