swift - 如何将 Realm 对象添加到 Set
问题描述
我想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)
原来应用程序内存不足。
我想解决这个问题。
解决方案
删除解决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
}
}
}
推荐阅读
- node.js - Mongoose post 'findOneAndUpdate' hook 'this' 是空对象
- java - 如何在 Java 中验证用户输入
- python - 如何使用 python-pptx 从幻灯片中提取图像的尺寸
- c# - 绑定 listView 以在另一个 listView 中显示与其关联的数据
- c++ - 从字符串转换的编译时检查?
- c - 在 ac 程序中获取(星号)作为输入
- ios - iOS 如何使用贝塞尔路径实现我的绘图?
- php - 为什么 Laravel 8 中的整数变形图不起作用
- c++ - static constexpr undefined reference error on clang
- vba - Access-想要在主窗体上打开主窗体的按钮