一尘不染

Swift类中的错误:super.init调用未初始化属性

swift

我有两节课,ShapeSquare

class Shape {
    var numberOfSides = 0
    var name: String
    init(name:String) {
        self.name = name
    }
    func simpleDescription() -> String {
        return "A shape with \(numberOfSides) sides."
    }
}

class Square: Shape {
    var sideLength: Double

    init(sideLength:Double, name:String) {
        super.init(name:name) // Error here
        self.sideLength = sideLength
        numberOfSides = 4
    }
    func area () -> Double {
        return sideLength * sideLength
    }
}

通过上面的实现,我得到了错误:

property 'self.sideLength' not initialized at super.init call
    super.init(name:name)

为什么self.sideLength在致电之前必须先设置super.init


阅读 235

收藏
2020-07-07

共1个答案

一尘不染

引用Swift编程语言,它回答了您的问题:

“ Swift的编译器执行四项有用的安全检查,以确保两阶段初始化完成且没有错误:”

安全检查1“指定的初始值设定项必须确保由其类引入的所有属性在将其委托给超类初始值设定项之前都已初始化。”

摘录自:苹果公司“ The Swift Programming Language”。iBooks。
https://itunes.apple.com/cn/book/swift-programming-
language/id881256329?mt=11

2020-07-07