gpt4 book ai didi

ios - 为什么 Realm Set 对象会随机工作?

转载 作者:行者123 更新时间:2023-11-28 11:33:35 26 4
gpt4 key购买 nike

使用 set Realm 对象的函数总是随机的。

主键不得更改,并且必须是唯一的。
所以我添加了另一个用于比较的变量。
我覆盖了 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 {
return id == object.id
} 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) // []
let result = set1.intersection(set2)
print(result) // [Model { key = 9E814B97-D0CC-4550-BF7B-19645C1DB746; id = hi; }]
let result = set1.intersection(set2)
print(result) // []
let result = set1.intersection(set2)
print(result) // []
let result = set1.intersection(set2)
print(result) // [Model { key = 8A399388-1FA2-4699-8258-5DA5DFCEC203; id = hi; }]

每次我运行时,值都是随机出现的。
我做错了什么?

最佳答案

要使 Set 正常工作,您的对象需要正确实现 Hashable。 Realm Object 已经实现了 Hashable,据推测,== 实现调用了 isEqual

但是,hash 也应该与 isEqual 一致,但是您还没有覆盖 hash。您应该实现 hash,使两个相等的对象(由 isEqual 确定)具有相等的哈希值。

一种方法是这样做:

override var hash: Int {
return id.hash
}

关于ios - 为什么 Realm Set 对象会随机工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56232273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com