简体   繁体   English

如何在Realm Swift中使用NOT IN

[英]How to use NOT IN with Realm Swift

I have a list of Realm objects (let's say User) and I want to retrieve all of them but "John", "Marc", "Al' Med" and so on. 我有一个Realm对象列表(让我们说User),我想要检索所有这些对象,但“John”,“Marc”,“Al'Med”等等。

I tried the following: 我尝试了以下方法:

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)

I also tried with NSPredicate(format: "name NOT IN {%@}", namesStr) but it would crash (exception raised). 我也试过NSPredicate(format: "name NOT IN {%@}", namesStr)但它会崩溃(引发异常)。

And second thing , how am I suppose to escape the names in the NSPredicate. 第二件事 ,我怎么想逃避NSPredicate中的名字。 If one of the names has a ' character, it won't probably work. 如果其中一个名称具有'字符,则它可能不起作用。


EDIT 编辑

Thanks to LE SANG, here's the functional result: 感谢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)

According to the Realm document , these ways should work 根据Realm文档 ,这些方法应该有效

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM