对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的声明中为其赋予一个初始值。

10-08 16:59