我有对象Dog带有变量
名称:字符串,年龄:整数
我有[狗]和5只狗
我想断言,哪个dog.name包含输入值
下面的代码失败,错误说“没有键名”
let searchPredicate = NSPredicate(format: "SELF Any.name CONTAINS[c] %@", text)
let array = (data as NSArray).filtered(using: searchPredicate)
let productSearchResults = array
不需要NSPredicate,可以直接在数组上使用过滤器
let productSearchResults = array.filter { $0.name.contains(text) }
但是如果您真的想使用NSPredicate,请尝试:
NSPredicate(format: "ANY name contains[c] %@", text)
尝试使用filter
功能
let filterArray = dogArray.filter { $0.name.lowercased().contains(searchText.lowercased()) }
正如@Larme在评论中已经提到的,您应该考虑使用Swifts Array.filter()
。
但是,如果出于某些原因想要或必须使用NSPredicate
,也可以这样做。请注意,谓词用于测试数组中的每个元素。因此,必须针对元素给出谓词中使用的keyPath。
因此,谓词必须为:let searchPredicate = NSPredicate(format: "name CONTAINS[c] %@", text)