如何在CoreData iOS谓词构建器中多次传递相同的参数?

时间:2017-09-12 07:14:30

标签: ios swift core-data nspredicate

我有UITableView UISearchbar,我可以根据search text中的UISearchbar过滤数据。

CoreData表包含3 attributes

name, notes, date

我想根据User搜索文本搜索三列中的任何匹配项。

所以我尝试了这个:

let searchText = searchText.lowercased()
let query = "name contains[cd] %@ OR notes contains[cd] %@ OR date contains[cd] %@"
let predicate = NSPredicate(format: query, searchText, searchText, searchText)

有没有办法一次传递相同的参数searchText

Java字符串格式化程序:

let query = "name contains[cd] %1$@ OR notes contains[cd] %1$@ OR date contains[cd] %1$@"
let predicate = NSPredicate(format: query, searchText)

1 个答案:

答案 0 :(得分:2)

您可以使用替换变量

let searchText = searchText.lowercased()
let template = NSPredicate(format: "name contains[cd] $SRCH OR notes contains[cd] $SRCH OR date contains[cd] $SRCH")
let subVars = ["SRCH": searchText]
let predicate = template.withSubstitutionVariables(subVars)

参见"使用谓词模板创建谓词"在Apple Documentation