0

var entry:NSMutableOrderedSet //DataEntry オブジェクトを含む

この関数を使用して、この順序付きセットに 7 つのオブジェクトを追加しています。

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関数が7回以上(10~13回)呼び出されます。なんで?

4

0 に答える 0