镜像变量返回零

时间:2018-04-30 05:34:35

标签: swift

这是按预期工作的

struct ProgrammingLanguage {
    let name: String?
}
let language = ProgrammingLanguage(name: "Swift")
let mirror = Mirror(reflecting: language.name)
print(mirror.children.first?.value)

// Optional("Swift")

删除选购件时,打印出零

struct ProgrammingLanguage {
    let name: String
}
let language = ProgrammingLanguage(name: "Swift")
let mirror = Mirror(reflecting: language.name)
print(mirror.children.first?.value)

// nil

有人可以解释为什么选项会存在一个值,否则它就是零?

2 个答案:

答案 0 :(得分:2)

引用Mirror documentationMirror是:

  

任何类型的实例的子结构和显示样式的表示。

问题是String没有子结构因此它没有子节点。要使用Mirror检查其值,您必须使用children的{​​{1}}。

适用于可选ProgrammingLanguage,因为可以检查String本身,并且其唯一的子项是其关联值。

答案 1 :(得分:0)

试试这个

struct ProgrammingLanguage {
    let name: String
}
let language = ProgrammingLanguage(name: "Swift")
let mirror = Mirror(reflecting: language)
for (name, value) in mirror.children {
    guard let name = name else { continue }
    print("\(name): \(type(of: value)) = '\(value)'")
}