如何在不修改Codable结构体的前提下遍历其属性并统计数组元素数量?
遍历Codable结构体数组属性并打印元素数量的方案
可以通过Swift的**反射机制(Mirror)**实现,无需修改原Examp结构体,就能遍历所有数组属性并打印名称和元素数量,代码示例如下:
假设你已经完成JSON解码得到result实例:
let result = try JSONDecoder().decode(Examp.self, from: jsonData)
使用Mirror遍历属性:
let mirror = Mirror(reflecting: result) for child in mirror.children { // 过滤出有属性名且值为数组的项 guard let propertyName = child.label, let array = child.value as? [Any] else { continue } // 将属性名转为小写(如Cats → cats) let formattedName = propertyName.lowercased() // 格式化数字为带千分位的字符串(如1015 → 1,015) let formattedCount = NumberFormatter.localizedString( from: NSNumber(value: array.count), number: .decimal ) print("\(formattedName) .. \(formattedCount)") }
代码说明
- Mirror反射:
Mirror(reflecting: result)会创建一个反射实例,用于访问Examp结构体的所有属性信息。 - 属性过滤:通过
guard语句筛选出有明确属性名、且值为数组类型的属性,自动忽略非数组属性。 - 格式处理:将原结构体的大写开头属性名转为小写,同时用
NumberFormatter给数字添加千分位分隔符,匹配你需要的输出格式。
这种方式完全不需要修改原Examp结构体,就能批量处理所有数组属性,避免重复编写print语句。
内容的提问来源于stack exchange,提问作者Fattie
相关产品推荐
相关产品推荐

