我很确定这只适用于类,但不确定是否可以使用结构执行以下操作:
protocol Pro {
var x: Int {get set}
mutating func foo()
}
protocol Pro2: Pro {
var y: Int {get set}
}
protocol Pro3: Pro {
var z: Int {get set}
}
extension Pro2 {
mutating func foo() {y *= 2}
}
extension Pro3 {
mutating func foo() {z += 2}
}
struct Aye: Pro2, Pro3 {
var x: Int = 0
var y: Int = 0
var z: Int = 0
mutating func foo() {
// call foo() from Pro2 and Pro3
}
}
我希望结构从 Pro2
和 Pro3
调用 foo()
最佳答案
目前没有,因为
- (您可能已经知道)您需要使用 something 实现
Aye#foo
,因为有多个默认实现具有相同的签名。 - 您不能在实现中调用
self.foo
而不会导致无限递归,无论您尝试多少转换。 - 将始终调用结构中的实现而不是默认实现,因此不可能在调用站点进行任何花哨的转换。
我说“目前没有”是因为我不确定这种行为是否是设计使然。正如您所说,这对类(class)来说没有问题。
(我有另一个答案,这太离谱了。感谢 @appzYourLife 更正它。)
关于swift - 1 个结构、3 个协议(protocol)和 1 个函数来调用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38936963/