[ 首先,如果有人对问题有更好的名称,提案就会被广泛接受.到目前为止,我没有找到更好的名称.]
所以,这就是问题所在.
假设我有一个协议ProtocolA,协议ProtocolB和协议ProtocolX定义如下:
protocol ProtocolA {
func doSomethingA()
}
protocol ProtocolB {
func doSomethingB()
}
protocol ProtocolX {
var handler: ProtocolA { get }
}
Run Code Online (Sandbox Code Playgroud)
然后我在ProtocolX的一个类中有一个正确的实现,如下所示:
class Donald: ProtocolX {
...
var handler: ProtocolA { ... }
...
}
Run Code Online (Sandbox Code Playgroud)
然后一切正常,协议要求得到正确履行.
但
如果我这样实现:
class Donald: ProtocolX {
...
var handler: ProtocolA & ProtocolB
...
}
Run Code Online (Sandbox Code Playgroud)
我有一个编译时问题,报告我的类Donald不符合ProtocolX(根据规范,要求var handler必须符合ProtocolA).
从理论上讲,var handlerIS符合ProtocolA(但它也符合ProtocolB).
然后我的问题是:为什么编译时问题?我身边的迅速限制或概念问题?
您可以通过扩展其中一个协议来实现另一个协议来解决该问题,这样您就可以解决该问题。
你可以让A继承B:
protocol ProtocolA: ProtocolB {
func doSomethingA()
}
protocol ProtocolB {
func doSomethingB()
}
protocol ProtocolX {
var handler: ProtocolA { get }
}
Run Code Online (Sandbox Code Playgroud)
由于 A 继承自 B,因此 B 中的每个属性在 A 中都可用。
然后您可以在协议 X 中使用它们,因为 A 继承自 b
检查这个答案
| 归档时间: |
|
| 查看次数: |
850 次 |
| 最近记录: |