首页 > 解决方案 > 如何将 Realm 对象添加到 Set

问题描述

我想setRealm 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)
原来应用程序内存不足。
我想解决这个问题。

标签: swiftsetrealm

解决方案


删除解决selfself.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
        }
    }
}

推荐阅读