如何在 Realm Swift 中使用 NOT IN

Posted

技术标签:

【中文标题】如何在 Realm Swift 中使用 NOT IN【英文标题】:How to use NOT IN with Realm Swift 【发布时间】:2016-01-21 02:57:54 【问题描述】:

我有一个 Realm 对象列表(假设是 User),我想检索除“John”、“Marc”、“Al' Med”等之外的所有对象。

我尝试了以下方法:

var namesStr = ""
for user in unwantedUsers 
    namesStr += "'" + user.name + "', "

namesStr = String(namesStr.characters.dropLast().dropLast())
let predicate = NSPredicate(format: "NOT name IN %@", namesStr)
let remainingUsers = uiRealm.objects(User).filter(predicate)

我也尝试使用NSPredicate(format: "name NOT IN %@", namesStr),但它会崩溃(引发异常)。

第二件事,我想如何转义 NSPredicate 中的名称。如果其中一个名称包含 ' 字符,则它可能不起作用。

编辑

感谢 LE SANG,这是函数结果:

var userArr: [String] = []
for user in unwantedUser 
    userArr.append(user.name)

let predicate = NSPredicate(format: "NOT name IN %@", userArr)
let remainingUsers = uiRealm.objects(User).filter(predicate)

【问题讨论】:

什么是 [uiRealm.objects(Image)]? @NguyenHoan 打错了,应该是uiRealm.objects(User) 可能重复:“如何在 Swift 中不使用领域”/jk 【参考方案1】:

根据Realm document,这些方法应该可以工作

let predicate = NSPredicate(format: "NOT (name IN %@)", namesStr)
let predicate = NSPredicate(format: "!(name IN %@)", namesStr)
let predicate = NSPredicate(format: "NOT name IN %@", namesStr)

【讨论】:

完美!当它说name IN ‘Lisa’, ‘Spike’, ‘Hachi’时,我误解了该文件。而且我什至不需要再将数组连接成字符串了! 也可以使用数组

以上是关于如何在 Realm Swift 中使用 NOT IN的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift for Realm 模型中设置主键

如何在Swift中返回Realm列表?

Realm (Swift):如何在迁移期间获取 MutableSet 数据?

什么时候/如何排序Realm孩子 Swift中UITableView的属性

如何使用 Realm 选择当前项目以从 Swift 中的数组中删除它

如何使用 Realm swift 在本地设备上存储资产?