2

ここで提案されているプロトコルと拡張機能を使用して、 Swiftで抽象的なスーパークラスのような動作を作成しようとしてい ます。たとえば、抽象形状クラスの周囲を取得したい場合:

protocol Shape {
    static var numSides: Int {get}
    var sideLength: Double {get}
}
class Triangle: Shape {
    static var numSides: Int = 3
    var sideLength: Double
    init (sideLength: Double) { self.sideLength = sideLength }
}
class Square: Shape {
    static var numSides: Int = 4
    var sideLength: Double
    init (sideLength: Double) { self.sideLength = sideLength }
}
extension Shape {
    func calcPerimeter() -> Double {
    return sideLength * Double(numSides)
    }
}

Swift は、calcPerimeter メソッドで static var numSides を使用することを望んでいません。インスタンス変数にすればコードが実行されることはわかっていますが、これは正しい方法ではないようです。これを行う最善の方法は何ですか?

4

1 に答える 1

2

インスタンス 1 ではなく、静的変数として numSide を使用する必要があります。Shape.numSides を呼び出すことはできませんがSelf、具象クラスを参照するキーワードを使用できます。これを試して:

Self.numSides
于 2016-01-13T08:44:04.017 に答える