Как добавить объекты Realm в Set - PullRequest
0 голосов
/ 20 мая 2019

Я хочу использовать set с Realm Object.

Первичные ключи не должны быть изменены, и они должны быть уникальными.
Поэтому я добавил еще одну переменную для сравнения.
И япереопределить isEqual(:) функцию.

class Model: Object {
    @objc dynamic var key = ""
    @objc dynamic var id = ""

    override static func primaryKey() -> String? {
        return "key"
    }

    override func isEqual(_ object: Any?) -> Bool {
        if let object = object as? Model {
            if self.id == object.id {
                return true
            } else {
                return false
            }
        } else {
            return false
        }
    }
}

let model1 = Model()
model1.key = UUID().uuidString
model1.id = "hi"

let model2 = Model()
model2.key = UUID().uuidString
model2.id = "hi"

let model1Array = [model1]
let model2Array = [model2]

let set1 = Set(model1Array)
let set2 = Set(model2Array)

let result = set1.intersection(set2)
print(result) // []

Я хочу использовать set с объектом Realm.
Но как мне это сделать ??

Мне нужноunion, intersection, subtracting и более ...
Мне нужно сравнить более 20 000 моделей.(20000 * 20000 = 400000000)
Оказывается, приложению не хватает памяти.
Я хочу решить эту проблему.

1 Ответ

1 голос
/ 20 мая 2019

Удаление self из self.id решит вашу проблему, и вы получите ожидаемые результаты. Это похоже на ошибку, но не уверен, почему она существует. Вы также можете упростить проверку на равенство return id == otherModel.id.

class Model: Object {
    @objc dynamic var key = ""
    @objc dynamic var id = ""

    override static func primaryKey() -> String? {
        return "key"
    }

    override func isEqual(_ object: Any?) -> Bool {
        if let otherModel = object as? Model {
            return id == otherModel.id
        } else {
            return false
        }
    }
}
...