RealmObject Equatable избыточное сообщение
У нас есть простой класс Person
который присущ из миров Object
, Теперь мы хотим, чтобы этот подкласс соответствовал Equatable
протокол. Очень простой код выглядит следующим образом.
class Person: Object, Equatable {
dynamic var localID = "0"
dynamic var name:String?
}
func ==(lhs: Person, rhs: Person) -> Bool {
return lhs.localID == rhs.localID
}
Мы начали с версии 0.98.8, и все работало так, как было задумано. При обновлении до версии 0.102.0 (и других версий между ними) появляется сообщение об ошибке компилятора
Error: Redundant conformance of ‚Person‘ to protocol ‚Equatable‘
Как ни странно, если вернуться к версии 0.98.8, ошибка все равно останется. Еще одно странное поведение на одном из наших разработчиков: тот же код компилируется просто отлично.
После некоторых исследований мы понятия не имеем, что происходит и как это исправить или обойти.
3 ответа
Последняя версия RealmSwift
инвентарь Equatable
по умолчанию вы можете посмотреть на Object.swift
от RealmSwift
код.
Для переопределения по умолчанию Equatable
поведение, вы можете переопределить эту функцию:
public override func isEqual(object: AnyObject?) -> Bool
После этого существующий код Swift с ==
вернет результат на основе пользовательского условия, определенного внутри isEqual
, Не нужно создавать func ==
вручную.
Это все еще использует isEqual
из-за RLMObjectBase
подкласс от NSObject
, не чистый объект Swift.
Обновленная подпись для Swift 4:
open override func isEqual(_ object: Any?) -> Bool {
return true
}
В RealmSwift
, Object
уже соответствует Equatable
, Так что вам не нужно добавлять Equatable
в определении Person
,