我在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