假设您正在对一个巨大的JSON文件进行解码:

struct Examp: Codable {
  let Cats: [CatsItem]
  let Dogs: [DogsItem]
  let Horses: [HorsesItem]
  .. forty more
}

在解析之后,您只需在控制台上查看以下各项的数量:

print("cats .. \(result.Cats.count)")
print("dogs .. \(result.Dogs.count)")

以此类推,结果是cat 1015只,狗932只,等等.

我太懒了,不想重复键入这样的一行代码:

print("cats .. \(result.Cats.count)")

在不以任何方式修改Examp的情况下,有没有一种方法可以做到以下几点:

for (thing) in Examp { print("\(thing string) .. \(result.(thing).count)") }

推荐答案

您可以使用Mirror来反映Examp,并循环遍历它的子 node .然后可以打印每个子元素的名称和值.要获取数组的大小,可以将值转换为[Any],因为数组是协变的(任何类型的数组都可以转换为[Any]).

例如:

struct Example: Codable {
    let cats: [String]
    let dogs: [String]
    let horses: [String]
}

let example = Example(cats: [""], dogs: ["", ""], horses: ["", "", ""])
let mirror = Mirror(reflecting: example)
for (name, value) in mirror.children {
    guard let name, let array = value as? [Any] else { continue }
    print("\(name) .. \(array.count)")
}

Swift相关问答推荐

在运行时检测蒸汽工人的类型

如何获取SCNCamera正在查看的网格点(SCNNode)的局部坐标和局部法线?

是否可以将具有关联值的枚举强制转换为其类型与关联值匹配的变量?

将NavigationSplitView更改为NavigationStack

如何通过 Enum 属性使用新的 #Predicate 宏获取

Xcode创建GitHub仓库,但未推送所有文件

在 Swift 5.7 中使用协议作为类型时什么时候需要写 `any`

可以使 Swift init 仅可用于 Objective C 吗?

SwiftUI 无法在实时活动中显示 SpriteView

将 Encodable 扩展添加到 Swift 嵌套枚举

为什么在Swift中每次调用Decimal类型的formatted()方法都会越来越慢?

Swiftui 按钮依次显示一组图像

为什么 switch 在 optional 中不接受 case nil?

Swift 函数 vs 惰性变量 vs 计算(computed)属性 - 区别?

FCM 后台通知在 iOS 中不起作用

关闭 UITableViewRowAction

自定义 MKAnnotation 标注视图?

UISearchbar TextField 的高度可以修改吗?

如何将 Int 拆分为其各个数字?

将 UIImage 剪成圆形