【发布时间】:2016-04-18 03:25:14
【问题描述】:
我一直在尝试使用此处建议的协议和扩展在 Swift 中创建类似于抽象超类的行为:Abstract classes in Swift Language 但我不知道如何编写使用静态(类)变量的方法。例如,如果我想获取一个抽象形状类的周长:
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 方法中使用静态变量 numSides。我知道如果我将它设为实例变量,代码就会运行,但这似乎不是正确的方法。最好的方法是什么?
【问题讨论】:
标签: swift polymorphism abstract-class swift-extensions swift-protocols