我不认为这可以做到,但我还是要问。我有一个协议:
protocol X {}
还有一个班:
class Y:X {}
在余下的代码中,我使用协议 X 引用所有内容。在该代码中,我希望能够执行以下操作:
let a:X = ...
let b:X = ...
if a == b {...}
问题是,如果我尝试实现 Equatable
:
protocol X: Equatable {}
func ==(lhs:X, rhs:X) -> Bool {
if let l = lhs as? Y, let r = hrs as? Y {
return l.something == r.something
}
return false
}
尝试并允许使用 ==
同时隐藏协议背后的实现的想法。
Swift 不喜欢这样,因为 Equatable
有 Self
引用,它将不再允许我使用它作为类型。只是作为一个通用的参数。
那么,是否有人找到了一种方法,可以将操作符应用于协议,而不会使协议作为一种类型变得无法使用?