如何测试Any是否实际上是可选的? (Swift)

如何测试Any是否实际上是可选的? (Swift)

问题描述:

我正在写一些调试代码,我需要传递一个Any类型的参数。出于打印目的,我想打开参数值,如果它是可选的,但我不知道如何测试 - 我能想到的每种语法形式都被编译器拒绝。例如,如何测试Any是否实际上是可选的? (Swift)

switch val { 
case as Optional<Any>: 
    . 
    . 

和各种形式let(包括试图.dynamicType)是不合法的。有谁知道如何实际做到这一点?总的来说,我试图完成的是,无论该值是否为可选,我都会将实际值转换为字符串,而不是可选。

+2

比较http://stackoverflow.com/a/32516815/1187415。 –

+0

非常感谢你。我不会找到的! – Feldur

马丁是绝对正确的。从链接的帖子,略有修改,因为我想零不同的回报:

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 

}