1个struct,3个Protocols和1个func来调用它们

时间:2016-08-13 20:58:51

标签: swift polymorphism protocols

我很确定这只适用于课程,但不确定是否可以使用结构执行以下操作:

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
    }
}

我希望结构调用来自foo()Pro2

Pro3来电

1 个答案:

答案 0 :(得分:1)

目前不是,因为

  • (正如您可能已经知道的那样)您需要使用某些实现Aye#foo,因为有多个具有相同签名的默认实现。
  • 无论你尝试多少演员,你都不能在实现中调用self.foo而不会导致无限递归。
  • 结构中的实现将总是而不是默认工具,因此无法在呼叫站点进行任何花哨的演员。

我说“不是”,因为我不确定这种行为是否符合设计要求。正如你所说,这对课程来说没有问题。

(我有另一个答案,这是偏离基础的。感谢@appzYourLife纠正它。)