2

我一直試圖使用這裏提出的協議和擴展在Swift中使抽象的超類行爲:Abstract classes in Swift Language 但我無法圖瞭解如何編寫使用靜態(類)變量的方法。例如,如果我想獲得一個抽象的形狀類的周長:如何訪問使用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) 
    } 
} 

斯威夫特不希望我在calcPerimeter方法使用靜態無功即numSides。我知道,如果我將它作爲一個實例變量,代碼將運行,但這似乎不是正確的方式。做這個的最好方式是什麼?

回答

2

你應該使用numSide作爲靜態變量而不是實例之一。 您不能調用Shape.numSides,但可以使用Self關鍵字引用具體類。 試試這個:

Self.numSides 
+0

不是自我,而是自我。謝謝! –

+0

是的,我的答案中的自我是大寫。 – Greg

相關問題