NSPredicate包含但仅当不为空时包含



似乎对于NSPredicate(format: "name CONTAINS %@", name):

如果name不是空的,那么它工作正常

但是如果name是空的,那么它不会获取所有内容。相反,它不获取任何东西。

目前我必须创建两个单独的nspreates来绕过这个行为,但是当有多个字符串值要过滤时,它会很快变得复杂。

例如:

if name.isNotEmpty {
predicate = NSPredicate(format: "name CONTAINS %@ AND summary = %@", name, summary)
} else {
predicate = NSPredicate(format: "summary = %@", summary)
}

然后使用该谓词获取请求。

我尝试过的另一个选项是简单地获取所有内容,然后使用string.contains()函数过滤它。

但是,如果可能的话,我希望避免从读取请求中返回太多记录。

有更好的方法吗?

我也使用NSCompoundPredicate作为@Joakim Danielson在评论中建议处理的行为:

你只需要隔离需要使用AND/OR的情况下,你使用多个逻辑:

var predicates: [NSPredicate] = []
predicate.append(defaultPredicate1)
predicate.append(defaultPredicate2)
...
if condition1 {
predicate.append(conditionPredicate1)
}
if condition2 {
predicate.append(conditionPredicate2)
}
...
let finalPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: predicates)

简单的例子:

var predicates: [NSPredicate] = []
predicates.append(NSPredicate(format: "summary = %@", summary))
if name.isNotEmpty {
predicate.append(NSPredicate(format: "name CONTAINS %@)", name))
}
let finalPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: predicates)

相关内容

  • 没有找到相关文章

最新更新