我一直在試圖實現一個協議和協議擴展,它在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 –