我在Xcode中使用Playground,並且我的對象沒有使用它們的名稱進行初始化。我覺得這是因爲我在我的sublcasses中錯誤地使用了便利的init,我想知道在子類中使用它們的正確方法是什麼。我已閱讀其他類似問題,但我認爲我的問題與overriding inits
和convenience inits
的方式不同。在子類中使用便捷初始化(Swift)
class Animal
{
var name:String
init(name:String)
{
self.name = name
}
convenience init() { self.init(name: "") }
func speak() { }
}
class Fox: Animal
{
override init(name: String)
{
super.init(name: name)
}
convenience init() { self.init(name: "Fox") }
override func speak()
{
println("Ring")
}
}
class Cat: Animal
{
override init(name: String)
{
super.init(name: name)
}
convenience init() { self.init(name:"Cat") }
override func speak() {
println("Meow")
}
}
class Dog: Animal {
override init(name: String) {
super.init(name: name)
}
convenience init()
{
self.init(name:"Dog")
}
override func speak() {
println("Woof")
}
}
let animals = [ Dog(), Cat(), Fox()]
for animal in animals
{
animal.speak()
}
什麼問題?你在動物中的動物......對我很有用。你不需要在子類中覆蓋init,但是當你重寫時,這不是問題。 – GoZoner
speak()無法正常工作。我得到的輸出是: – stumped
__lldb_expr_13.Dog __lldb_expr_13.Cat __lldb_expr_13.Fox – stumped