让我们说你有Apple的几个子类。
class Apple {
let color = ""
}
class redDelicious :Apple {
let color = "Red"
}
class grannySmith :Apple {
let color = "Green"
}
func eatApple (appleToEat: Apple)
{
if appleToEat.color == "Red" {
//do something
} else if appleToEat.color == "Green"
{
//do something else
}
}
问题在于,swift不会让我称之为"颜色"属性,但我想确保在子类中定义。我还想确保每个苹果都有颜色,这样我就可以在Apple的每个sublcass上调用颜色属性。在这种情况下,最好的解决方案是什么?
答案 0 :(得分:3)
你可以这样做:
class Apple {
let color: String
init(color: String) {
self.color = color
}
}
class RedDelicious: Apple {
init() {
super.init(color: "Red")
}
}
或者,您可以使用只读计算属性:
class Apple {
var color: String { return "" }
}
class RedDelicious: Apple {
override var color: String { return "Red" }
}
如果color
只能是特定值,则可能值得使用枚举,例如:
class Apple {
enum Color {
case Red, Green
}
let color: Color
init(color: Color) {
self.color = color
}
}
class RedDelicious: Apple {
init() {
super.init(color: .Red)
}
}
在eatApple
函数中,您可以执行以下操作:
func eatApple (appleToEat apple: Apple) {
switch apple.color {
case .Red : // ...
case .Green: // ...
}
}