Я пытался реализовать расширение протокола и протокола, которое предоставляет метод по умолчанию == в режиме быстрого. Что-то вроде этого:Реализация метода равных по умолчанию для протокола
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 –