1. ホーム
  2. プロパティ

[解決済み】Swiftのクラスでエラー。super.initの呼び出しでプロパティが初期化されていない

2022-04-04 14:47:55

質問

2つのクラスがあります。 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 ?

解決方法は?

The Swift Programming Languageから引用すると、あなたの質問に答えています。

<ブロッククオート

「Swiftのコンパイラは4つの有用な安全性チェックを行い 二相の初期化がエラーなく完了すること"

安全性チェック1 「指定イニシャライザーは、すべての 「そのクラスが導入するプロパティが初期化される前に は、スーパークラスのイニシャライザーに委ねます。"

からの抜粋です。アップル株式会社 "The Swift Programming Language." iBooks. https://itunes.apple.com/us/book/swift-programming-language/id881256329?mt=11