如何通过object.name来确定数组内部的对象

问题描述 投票:0回答:3

我有对象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
ios swift predicate
3个回答
0
投票

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

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

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

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

0
投票

尝试使用filter功能

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

0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.