Функция 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 раз). Зачем?

0 ответов

Другие вопросы по тегам