You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不修改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)")
}

代码说明

  1. Mirror反射:Mirror(reflecting: result)会创建一个反射实例,用于访问Examp结构体的所有属性信息。
  2. 属性过滤:通过guard语句筛选出有明确属性名、且值为数组类型的属性,自动忽略非数组属性。
  3. 格式处理:将原结构体的大写开头属性名转为小写,同时用NumberFormatter给数字添加千分位分隔符,匹配你需要的输出格式。

这种方式完全不需要修改原Examp结构体,就能批量处理所有数组属性,避免重复编写print语句。

内容的提问来源于stack exchange,提问作者Fattie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 13:05:06