我一直在试图实现一个协议和协议扩展,它在swift中提供了一个默认的==方法。事情是这样的:为协议实现默认的equals方法
protocol NameProtocol: Equatable {
func getName() -> String
}
extension NameProtocol{}
func ==<T: NameProtocol>(lhs: T, rhs: T) -> Bool{
return lhs.getName() == rhs.getName()
}
然后像这样一类:
class NamedObject: NSObject, NameProtocol {
let name: String
init(name: String) {
self.name = name
super.init()
}
func getName() -> String {
return self.name
}
}
但是,自定义==方法不会被调用:
let one = NamedObject(name: "Name")
let two = NamedObject(name: "Name")
if one == two {
NSLog("EQUAL")
}
else{
NSLog("NOT EQUAL")
}
我在这里干什么什么了吗?
UPDATE:
从我得到的答案,它看起来像我想要做到的是不是真的有可能。唯一接近的方式是子类(它有明显的缺点)。我将继续寻找适当的解决方案。
有什么方法可以改变这种行为吗?我真的不想失去NSObject超类方法。我基本上想提供isEqual的默认实现。 –
创建您自己的基类来覆盖NSObject的行为。看到我编辑的答案 –
,它的工作原理,我希望能想出一个可以应用于任何地方的通用协议,例如我可以将它应用于UIView或常规NSObject –