我们必须在Realm中存储具有字符串字段数组的元素。
为此,我们必须实施小型解决方法:
class RealmString: Object {
@objc dynamic var value = ""
override init(value: Any) {
super.init(value: [value])
}
required init(realm: RLMRealm, schema: RLMObjectSchema) {
super.init(realm: realm, schema: schema)
}
required init() {
super.init()
}
required init(value: Any, schema: RLMSchema) {
super.init(value: [value], schema: schema)
}
}
class Realm2Element: Object {
let tags = List<RealmString>()
}
结果:
ANY tags.value == "tag0" AND ANY tags.value == "tag1" AND ANY tags.value == "tag2"
ANY tags.value IN {"tag0", "tag1", "tag2"}
Realm3支持基元数组。我们从条件中删除了.value
keyPath。但是,在为Realm3Element
:
class Realm3Element: Object {
let tags = List<String>()
}
包含所有条件:
'Invalid value', reason: 'Expected object of type (null) for property 'tags' on object of type 'Realm3Element', but received: tag0'
包含任何条件:
'Expected object of type (null) in IN clause for property 'tags' on object of type 'Realm3Element', but received: tag0'
我们经历了所有可能的变化,但无法找到任何解决方案。
Realm3是否支持基元数组字段过滤?
答案 0 :(得分:0)
使用Realm predicate
无法实现目标,因为Realm使用Predicates
有很多限制,但您可以使用这种方式作为解决方法
let filterArray = ["tag0","tag1"]
Array(realm.objects(Realm3Element.self)).filter({$0.tags.sorted().joined().contains(filterArray.sorted().joined())})
如果您想要一个完美的解决方案来跟踪此问题#5334