【发布时间】:2021-04-01 09:12:16
【问题描述】:
Mirror.Child 状态的文档,
当标签组件不是 nil 时,它可能代表一个存储属性的名称或一个活动的枚举大小写。如果将字符串传递给 descendant(::) 方法,则使用标签进行查找。
Mirror.Childlabel 的值何时为零?
【问题讨论】:
标签: swift reflection mirror
Mirror.Child 状态的文档,
当标签组件不是 nil 时,它可能代表一个存储属性的名称或一个活动的枚举大小写。如果将字符串传递给 descendant(::) 方法,则使用标签进行查找。
Mirror.Childlabel 的值何时为零?
【问题讨论】:
标签: swift reflection mirror
Mirror.Child 可以表示未标记的值,因此label 是Optional。
如果您创建一个 Mirror 来反映具有命名属性的类型(例如 struct 或 class),则 label 的每个属性都会有一个非零值。但是,您也可以 Mirror 带有未命名的孩子的事物,例如 Array。
当您使用Mirror 和Array 时,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])
输出:
Label: nil, value: 1
Label: nil, value: 2
Label: nil, value: 3
【讨论】: