我检查了几个与同一问题相关的主题,但我在自己的代码中找不到任何解决方案...
当我尝试覆盖我的Piano:Instrument子类中的函数tune()时发生错误。
我复制/超过了超类原始函数,以确保语法完全相同。
另外,在我看来,子类做得很好,因为super.init方法似乎按预期工作(没有编译器错误)。
拜托,有人可以指出我的错误在哪里?
代码:
class Music {
let notes: [String]
init(notes: [String]) {
self.notes = notes
}
func prepared() -> String {
return notes.joined(separator: " ")
}
}
class Instrument {
let model: String
init(model: String) {
self.model = model
func tune() -> String {
fatalError("Implement this method for \(model)")
}
func play(_ music: Music) -> String {
return music.prepared()
}
func perform(_ music: Music) {
print(tune())
print(play(music))
}
}
}
class Piano: Instrument {
let hasPedals: Bool
init(hasPedals: Bool, model: String) {
self.hasPedals = hasPedals
super.init(model: model)
}
override func tune() -> String {
fatalError("Implement this method for \(model)")
}
}
class Guitar: Instrument {
let hasAmplifyer: Bool
init(hasAmplifyer: Bool, model: String) {
self.hasAmplifyer = hasAmplifyer
super.init(model: model)
}
}
非常感谢!
答案 0 :(得分:0)
您在tune
函数内意外定义了play
,perform
和init
函数。将它们移到顶层:
class Instrument {
let model: String
init(model: String) {
self.model = model
}
func tune() -> String {
fatalError("Implement this method for \(model)")
}
func play(_ music: Music) -> String {
return music.prepared()
}
func perform(_ music: Music) {
print(tune())
print(play(music))
}
}
Swift看不到要覆盖的tune
函数,因为它希望它位于Instrument
的顶层。