我有一个协议声明Int类型的属性。我也有几个符合Protocol的类,现在我需要重载所有这些类的运算符+。因为operator+将基于声明的属性工作,所以我不想在每个类中分别实现该运算符。
所以我有

protocol MyProtocol {
    var property: Int { get }
}

我想要一些像
extension MyProtocol {
    static func +(left: MyProtocol, right: MyProtocol) -> MyProtocol {
        // create and apply operations and return result
    }
}

事实上,我成功地做到了,但是尝试使用它,我得到一个错误ambiguous reference to member '+'
当我将operator overload func分别移到每个类时,问题就消失了,但我仍在寻找一个解决方案,使其能够与协议一起工作。

最佳答案

通过将func +...移到扩展名之外来解决此问题,因此它只是文件中声明MyProtocol的一个方法

protocol MyProtocol {
    var property: Int { get }
}

func +(left: MyProtocol, right: MyProtocol) -> MyProtocol {
    // create and apply operations and return result
}

09-07 11:16