首页 > 解决方案 > 如何在swift中使用多个键的谓词搜索?

问题描述

我想应用带有名字和姓氏的搜索过滤器,并且我已经完成了单字段搜索,但我想同时应用搜索,即名字和姓氏。

var cityData = [[String: Any]]()


cityData.append(["id":1,"city":"Chicago","last_name":"Swire","first_name":"Sharlene"])
cityData.append(["id":1,"city":"Allahabad","last_name":"Singh","first_name":"Abhay"])
cityData.append(["id":1,"city":"Delhi","last_name":"Jaiswal","first_name":"Shikhar"])



let predicate = NSPredicate(format: "SELF contains[c] %@", searchTerm)
let searchData = cityData.filter { predicate.evaluate(with: $0["first_name"] as? String ?? "") }

但上面的代码只过滤名字,但我也需要过滤姓氏

标签: iosswiftpredicate

解决方案


如果您想根据名字或姓氏查找城市,您可以像这样在过滤器操作中添加或条件 let searchData = cityData.filter { predicate.evaluate(with: $0["first_name"] as? String ?? "") || predicate.evaluate(with: $0["last_name"] as? String ?? "") }

请看下面的例子:

var cityData = [[String: Any]]()
    
    
    cityData.append(["id":1,"city":"Chicago","last_name":"Swire","first_name":"Sharlene"])
    cityData.append(["id":1,"city":"Allahabad","last_name":"Singh","first_name":"Abhay"])
    cityData.append(["id":1,"city":"Delhi","last_name":"Jaiswal","first_name":"Shikhar"])
    
    
    
    let predicate = NSPredicate(format: "SELF contains[c] %@", "l")
    let searchData = cityData.filter { predicate.evaluate(with: $0["first_name"] as? String ?? "") || predicate.evaluate(with: $0["last_name"] as? String ?? "") }
    print(searchData)

这将打印结果:

[["last_name": "Swire", "first_name": "Sharlene", "city": "Chicago", "id": 1], ["city": "Delhi", "last_name": "Jaiswal", "id": 1, "first_name": "Shikhar"]]

推荐阅读