0

这按预期工作

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

// Optional("Swift")

删除可选项时,它会打印出 nil

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

// nil

有人可以解释为什么可选值存在一个值,否则它是 nil 吗?

4

2 回答 2

3

引用Mirror 文档Mirror是:

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

问题是它String没有子结构,因此它没有子结构。要使用 来检查其值Mirror,您必须使用childrenof ProgrammingLanguage

它适用于可选String,因为它Optional<T>本身可以被检查,它唯一的孩子是它的关联值。

于 2018-04-30T06:44:13.433 回答
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)'")
}
于 2018-04-30T05:45:18.097 回答