Mirror.Child 标签什么时候为 nil?

Ili*_*rim 0 reflection mirror swift

各州的文件Mirror.Child

当标签组件不为零时,它可能表示存储属性或活动枚举案例的名称。如果将字符串传递给descendant( : :) 方法,则使用标签进行查找。

什么时候Mirror.Child label值为零?

Dáv*_*tor 5

Mirror.Child可以表示未标记的值,因此labelOptional

如果您创建一个Mirror反映具有命名属性(例如 astructclass)的类型,label则每个属性都会有一个非零值。但是,您Mirror也可以使用未命名的子项,例如Array.

当您Mirror使用 an时Array, the 的元素Array将可访问为Mirror.Child,但它们的labels 将是nil

func mirrorChildren<T>(of object: T) {
    for child in Mirror(reflecting: object).children {
        print("Label: \(child.label ?? "nil"), value: \(child.value)")
    }
}

mirrorChildren(of: [1,2,3])
Run Code Online (Sandbox Code Playgroud)

输出:

Label: nil, value: 1
Label: nil, value: 2
Label: nil, value: 3
Run Code Online (Sandbox Code Playgroud)