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

时间:2016-06-14 20:32:56

标签: swift optional

我正在编写一些调试代码,我需要传递一个Any类型的参数。出于打印的目的,我想打开参数值,如果它是可选的,但我无法弄清楚如何测试 - 我能想到的每种句法形式都被编译器拒绝。例如,

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

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

1 个答案:

答案 0 :(得分:1)

马丁是绝对正确的。从链接的帖子,稍微修改,因为我想要一个不同的nil回报:

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

}