0

我想知道有没有办法以多态风格使用协议默认实现。例子

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”。但似乎默认实现是在编译时而不是运行时解决的。我的假设是对的吗?我怎么能得到预期的行为?

4

0 回答 0