【发布时间】:2018-07-01 19:56:35
【问题描述】:
使用PartialKeyPath API,您如何访问键路径引用的值?例如,这适用于非可选值,但不适用于 Optional 值。
我遇到的问题是 self[keyPath: keyPath] 返回一个非可选的 Any 值。
struct Element {
let name: String
let mass: Double?
func stringValue(_ keyPath: PartialKeyPath<Element>) -> String {
let value = self[keyPath: keyPath]
switch value {
case let string as String:
return string.capitalized
case nil:
return "N/A"
case let value:
return String(describing: value)
}
}
}
let element = Element(name: "Helium", mass: 4.002602)
let string = element.stringValue(\Element.mass) /* Optional(4.002602) */
结果是case nil 永远不会被执行,最后一个case 被打印为Optional(value)。
如何正确解开 value 以提取可选内容?
【问题讨论】:
-
也可能有帮助:forums.swift.org/t/…(参见
optionalPromotingCast(_:)函数)。