如何在Realm Swift中使用NOT IN

19

我有一个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)] 是什么? - Nguyen Hoan
@NguyenHoan 这是一个打字错误,应该是 uiRealm.objects(User) - Kalzem
可能是重复的问题:“如何在Swift中不使用Realm” /jk - Nicolas Miari
1个回答

43
根据 Realm文档,这些方法应该有效。
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’} 时,我误解了它的意思。而且我现在甚至不需要将数组连接成字符串了! - Kalzem
你也可以使用数组。 - onmyway133

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