class Animals{
var name : String = "default"
var age : Int = 0
func Details()-> String{
return "This animal is a \(name) and has \(age) years old."
}
}
class Dogs : Animals{
name = "dog"
}
class Cats : Animals{
name = "cat"
}
var MyAnimal = Dogs()
我想看到这条消息:“这只动物是一只狗,已经 0 岁了。” 但是每次我收到这个:“这只动物是默认的并且有 0 岁。”
var HisAnimal = Cats()
最佳答案
如果您想要存储属性而不是计算属性,您可以在初始化程序 中设置name
,如下所示:
class Animal {
let name: String
var age: Int = 0
/* designated initializer: fully initializes all instance properties */
init(name: String) {
self.name = name
}
func details() -> String {
return "This animal is a \(name) and has \(age) years old."
}
}
class Dog : Animal {
/* designated initializer of subclass: must call a designated
initializer from its immediate superclass */
init() {
super.init(name: "dog")
}
}
class Cat : Animal {
/* ... */
init() {
super.init(name: "cat")
}
}
let myAnimal = Dog()
这种机制确保 name
仅从一个地方设置,并显式传递给初始化程序。
关于swift - 如何在其子类中修改类的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41729282/