如何过滤SwiftyJSON数组?已尝试Stack Overflow方案仍未解决
解决JSON数组过滤并刷新TableView的问题
我来帮你搞定这个过滤数组并刷新TableView的问题~首先得说,你现在用[Any]类型的数组操作起来太麻烦,还容易出错,咱们先把它转成更安全的类型,再做过滤会顺畅很多,结合你用SwiftyJSON的情况,给你两种方案:
第一步:把[Any]转成易操作的类型
方案1:转成[[String: Any]]数组
替换你原来的数组定义,直接从SwiftyJSON转成字典数组:
var arrClientType: [[String: Any]] = [] self.json = JSON(value) self.arrClientType = self.json["client_type_data"].arrayObject as? [[String: Any]] ?? []
方案2:自定义模型(更规范推荐)
先定义一个和JSON结构匹配的模型:
struct ClientType: Codable { let clientTypeName: String let clientTypeId: Int // 对应JSON里的蛇形键名 enum CodingKeys: String, CodingKey { case clientTypeName = "client_type_name" case clientTypeId = "client_type_id" } }
然后把SwiftyJSON的数据转成模型数组:
var arrClientType: [ClientType] = [] self.json = JSON(value) if let rawData = try? self.json["client_type_data"].rawData() { arrClientType = try? JSONDecoder().decode([ClientType].self, from: rawData) ?? [] }
第二步:实现过滤逻辑
根据你的需求,比如过滤特定ID或者包含关键词的名称,举两个常用例子:
如果用[[String: Any]]数组
// 示例1:过滤client_type_id等于5的元素 let filteredArray = arrClientType.filter { item in guard let id = item["client_type_id"] as? Int else { return false } return id == 5 } // 示例2:过滤名称包含"Broker"的元素 let keyword = "Broker" let filteredArray = arrClientType.filter { item in guard let name = item["client_type_name"] as? String else { return false } return name.contains(keyword) }
如果用自定义模型数组
代码会更简洁安全:
// 示例1:过滤ID为5的元素 let filteredArray = arrClientType.filter { $0.clientTypeId == 5 } // 示例2:过滤名称包含"Broker"的元素 let keyword = "Broker" let filteredArray = arrClientType.filter { $0.clientTypeName.contains(keyword) }
第三步:刷新TableView
过滤完成后,把结果赋值给TableView的数据源数组,然后在主线程刷新UI(UI操作必须在主线程哦):
// 假设你有个专门存过滤后数据的数组,比如filteredClientTypes self.filteredClientTypes = filteredArray // 主线程刷新TableView DispatchQueue.main.async { self.tableView.reloadData() }
如果实在要坚持用[Any]数组过滤(不推荐,容易崩溃),可以这样写:
let filteredArray = arrClientType.filter { item in guard let clientDict = item as? [String: Any], let id = clientDict["client_type_id"] as? Int else { return false } return id == 1 // 这里替换成你的过滤条件 }
内容的提问来源于stack exchange,提问作者riddhi
相关产品推荐
相关产品推荐

