如何在 NSPredicate 的帮助下使用自定义对象数组实现搜索?
Posted
技术标签:
【中文标题】如何在 NSPredicate 的帮助下使用自定义对象数组实现搜索?【英文标题】:How to implement search using array of custom objects with help of NSPredicate? 【发布时间】:2018-05-04 08:51:10 【问题描述】:private var contactsWithSections = [[WPH]]()
WPH 具有以下属性:
class WPH: NSObject
var fName: String? = nil
var lName: String? = nil
var number: String? = nil
var email: String? = nil
我想根据 fName 进行搜索,即在数组中有 fname = alex, fname = alena, fname =flora
let searchStr = "al"
那么结果应该返回 alex 和 alena 的对象
【问题讨论】:
Swift: Filtering an array of structures using UISearchController/Predicates的可能重复 【参考方案1】:找到与我的问题完美匹配的更相关的解决方案
let filtered = MasterList!.filter (data) -> Bool in
return data.fName?.range(of: Key, options: String.CompareOptions.caseInsensitive) != nil || data.lName?.range(of: Key, options: String.CompareOptions.caseInsensitive) != nil
【讨论】:
【参考方案2】:你可以只使用平面地图然后过滤器
FlatMap 将加入所有部分过滤器将使用您的密钥对其进行过滤
let results = contactsWithSections.flatMap $0.filter (obj) -> Bool in
guard let keyValue = obj.fName else return false
return keyValue == searchStr
【讨论】:
它对我不起作用。 private var contactsWithSections = [[WPH]]() 如果有部分和内容。我需要使用 let searchStr = "al" 搜索所有匹配项,但您的代码将返回唯一值。 平面地图工作正常,但未返回匹配结果。 如果条件ok,前面的代码应该返回匹配的结果,你将应用平面图,然后在平面数组上应用过滤器,请参阅解决方案以上是关于如何在 NSPredicate 的帮助下使用自定义对象数组实现搜索?的主要内容,如果未能解决你的问题,请参考以下文章