Функция NSMutableOrderedSet "содержит (_ объект: любой)" не всегда вызывает метод isEqual объекта
var записи:NSMutableOrderedSet // содержит объекты DataEntry
Я добавляю семь объектов к этому упорядоченному набору с помощью этой функции:
func dataAssignment(data: Any) {
if let dict = data as? [String:DataEntry] {
entries.removeAllObjects()
for value in dict.values {
entries.add(value)
}
sort()
}
}
}
Это класс DataEntry:
open class DataEntry: NSObject {
var title:String
var text:String
...
}
extension DataEntry { //Equatable
open override func isEqual(_ object: Any?) -> Bool {
guard let object = object as? DataEntry else { return false }
return title == object.title
}
override open var hashValue: Int {
return title.hash
}
}
К этому упорядоченному набору я добавляю больше объектов, но только если объекты еще не являются частью упорядоченного набора (потому что я хочу уведомить заинтересованные стороны, если новые объекты были добавлены). Я использую это, чтобы добавить:
func dataAddition(data: Any) {
guard let entry = data as? DataEntry else {return}
if !self.entries.contains(entry) { //THIS FAILS
self.entries.add(entry)
self.sort()
}
else {
let entry = data as! DataEntry
}
}
Только иногда вызывается функция isEqual в DataEntry, но почему не всегда? Это приводит к дубликатам.
Кроме того, при выполнении self.entries.add(entry) функция isEqual вызывается более семи раз (от 10 до 13 раз). Зачем?