我认为这可能只是一种罕见的情况,但我如何处理来自两种不同协议的相同(模糊)功能。例如,我有这些定义:
protocol A {
func foo()
func bar() -> Int
}
protocol B {
func foo()
func bar() -> String
}
现在我有一个类符合A和B.我可以分别为A和B实现不同版本的foo()
。如果我能这样做,我怎么称呼他们?
P.S。我知道bar()
,我可以用这样的话来打电话:
let anInt = (instance as A).bar()
let aString = (instance as B).bar()
是否可以在foo()
函数上执行类似操作?
答案 0 :(得分:1)
没有。协议的要点是它要求一个对象提供一种特定的方法,但该方法并没有“捆绑”#34;协议。这就是为什么你可以使用扩展来使现有类使用现有方法符合新协议的原因。
作为一个注释,这听起来像是协议设计中的一个错误。对于相同的方法名称,有两个协议需要不同的语义,这表明该方法名称不正确。