这是按预期工作的
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
有人可以解释为什么选项会存在一个值,否则它就是零?
答案 0 :(得分:2)
引用Mirror documentation,Mirror
是:
任何类型的实例的子结构和显示样式的表示。
问题是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)'")
}