如何通过object.name断言数组内的对象

时间:2019-10-04 10:35:37

标签: ios swift predicate

我的对象Dog具有变量

name:字符串, 年龄:整数

我有5只狗在[狗]

我想断定搜索栏中的dog.name包含输入值

下面的代码失败,错误提示“没有键名”

 let searchPredicate = NSPredicate(format: "SELF Any.name CONTAINS[c] %@", text)
    let array = (data as NSArray).filtered(using: searchPredicate)
    let productSearchResults = array

3 个答案:

答案 0 :(得分:0)

@Larme在评论中已经提到,您应该考虑使用Swifts Array.filter()

但是,如果出于某些原因想要或必须使用NSPredicate,也可以这样做。请注意,谓词用于测试数组中的每个元素。因此,必须针对元素给出谓词中使用的keyPath。

因此,谓词必须为: let searchPredicate = NSPredicate(format: "name CONTAINS[c] %@", text)

答案 1 :(得分:0)

您不需要NSPredicate,可以直接在数组上使用过滤器

let productSearchResults = array.filter { $0.name.contains(text) }

但是,如果您真的想使用NSPredicate,请尝试:

NSPredicate(format: "ANY name contains[c] %@", text)

答案 2 :(得分:0)

尝试使用filter函数

 let filterArray = dogArray.filter { $0.name.lowercased().contains(searchText.lowercased()) }