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 次)。为什么?