如何在Swift中从Realm数据库过滤对象

3
我有一个realm数组,想过滤出id为2且user_id为4的对象。请查看下面的代码。

我有一个realm数组,想要筛选出包含id = 2和user_id = 4的对象。请查看我的下面的代码。

 for item in realm.objects(data.self).filter("id == 2 && user_id == 4") {
   print(item)
  }

1
那能编译吗?你少了一个 " - EpicPandaForce
@EpicPandaForce 我加了一个逗号,这是个错误。 - Inderpal Singh
在添加了两个答案后,您将第二个 id 更改为 user_id 吗?这不正常!请在发布问题之前始终检查您的问题! - pacification
3个回答

7
您在领域中使用了错误的运算符,请查看下面我的答案。
for item in realm.objects(data.self).filter("id == 2 AND user_id == 4") {
   print(item)
}

“AND”导致错误的逻辑。应该是“OR”,可能吗? - pacification
如何在Realm中使用 || 运算符 - Inderpal Singh
@InderpalSingh,没关系。作者修改了问题,你的答案几乎正确。 - pacification
1
@InderpalSingh,我不明白它为什么对你起作用,它甚至应该返回一个空数组! - Ahmad F

3

同时用等号将id与两个值进行比较似乎是不合逻辑的,id始终只有一个值(2或4),而非两个,这意味着您的代码应始终返回一个空数组。

如果您想基于id的值(如果为2或4)筛选对象,则可以按照以下方式执行:

for item in realm.objects(data.self).filter("id == 2 OR id == 4") {
   print(item)
}

请注意,在谓词中,应该使用“AND”而不是“&&”,使用“OR”而不是“||”。详情请查看:https://realm.io/docs/swift/latest/#filtering 这意味着item将是任何其id为2或4的项。
更新:
由于谓词的更改,从:
"id == 2 OR id == 4"

to

"id == 2 && user_id == 4"

你只需要简单地按照我在上面注释中提到的方法,将"&&"更改为"AND"即可:
for item in realm.objects(data.self).filter("id == 2 AND user_id == 4") {
   print(item)
}

-1

试试这个:

for item in realm.objects(data.self).filter("id = %@ OR id == %@",2,4) {
  print(item)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接