我想知道有没有办法以多态风格使用协议默认实现。例子
protocol RockInterface {
}
extension RockInterface {
func foo() {
print("You Rock")
}
}
extension RockInterface where Self: Metal {
func foo() {
print("Metal")
}
}
extension RockInterface where Self: Grunge {
func foo() {
print("Grunge")
}
}
class Rock: RockInterface {
init() {
foo()
}
}
class Metal: Rock {
}
class Grunge: Rock {
}
let rock = Rock() //prints "You Rock"
let metal = Metal() //prints "You Rock"
let grunge = Grunge() //prints "You Rock"
我希望 Metal() 打印“Metal”,而 Grunge 打印“Grunge”。但似乎默认实现是在编译时而不是运行时解决的。我的假设是对的吗?我怎么能得到预期的行为?