Swift中如何使用Realm过滤字典类型数据并检查元素存在性?
解决Realm中字典类型数据的过滤问题
嘿,我来帮你搞定这个Realm过滤字典的问题!你之前的写法有点问题,因为Realm对字典类型的查询需要明确针对键集合或者值集合来操作,直接用contains在字典上是不生效的。下面分几种常见场景给你解决方案:
1. 检查字典中是否存在指定的键
如果你想找dt字典里包含某个键(比如_ean作为键)的Article对象,要针对字典的键集合来查询:
_realm?.objects(Article.self).filter("dt.Keys CONTAINS %@", _ean).first
2. 检查字典中是否存在指定的值
如果你的需求是找dt字典里的值等于_ean的Article对象,就需要针对值集合查询:
_realm?.objects(Article.self).filter("dt.Values CONTAINS %@", _ean).first
3. 检查字典中是否存在特定的键值对
要是你需要精准匹配某个键对应的值等于_ean,可以用动态键的方式构建查询(比如键是一个变量):
// 假设你的目标键是一个变量keyToCheck let keyToCheck = "some_key" let predicate = NSPredicate(format: "dt.%K == %@", keyToCheck, _ean) _realm?.objects(Article.self).filter(predicate).first
为什么原代码不生效?
你之前写的"dt contains %@"是错误的,因为Realm的查询语法里,contains操作符不能直接作用于字典类型。字典类型需要通过.Keys或.Values来访问对应的集合,再对集合使用查询操作符。
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

