我正在编写一些调试代码,我需要传递一个Any类型的参数。出于打印的目的,我想打开参数值,如果它是可选的,但我无法弄清楚如何测试 - 我能想到的每种句法形式都被编译器拒绝。例如,
switch val {
case as Optional<Any>:
.
.
以及各种let
表单(包括尝试.dynamicType
)都不合法。有谁知道如何实际做到这一点?总的来说,我试图完成的是,无论该值是否是可选的,我将实际值转换为字符串而不是可选。
答案 0 :(得分:1)
func unwrap(any:Any, ifNil: Any = "nil") -> Any {
let mi = Mirror(reflecting: any)
if mi.displayStyle != .Optional {
return any
}
if mi.children.count == 0 { return ifNil }
let (_, some) = mi.children.first!
return some
}