我有一个协议声明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
}