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

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

我有两节课,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


慕标琳琳
浏览 1173回答 3
3回答

PIPIONE

Swift具有在初始化器中完成的非常清晰,特定的操作序列。让我们从一些基本的例子开始,一直到一般情况。我们来看一个对象A.我们将其定义如下。class A {     var x: Int     init(x: Int) {         self.x = x    }}请注意,A没有超类,因此它不能调用super.init()函数,因为它不存在。好了,现在让我们用一个名为B的新类子类A.class B: A {     var y: Int     init(x: Int, y: Int) {         self.y = y        super.init(x: x)     }}这与Objective-C不同,[super init]后者通常首先被调用。斯威夫特不是这样。在执行任何其他操作之前,您有责任确保实例变量处于一致状态,包括调用方法(包括超类'初始化程序)。
打开App,查看更多内容
随时随地看视频慕课网APP