0

var entries: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
            } 
}

只有有时会调用 DataEntry 的 isEqual 函数,但为什么不总是?这会导致重复。

此外,执行 self.entries.add(entry) 时,isEqual 函数被调用超过七次(10 到 13 次)。为什么?

4

0 回答 0