2016-06-14 31 views
0

我正在寫一些調試代碼,我需要傳遞一個Any類型的參數。出於打印目的,我想打開參數值,如果它是可選的,但我不知道如何測試 - 我能想到的每種語法形式都被編譯器拒絕。例如,如何測試Any是否實際上是可選的? (Swift)

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

和各種形式let(包括試圖.dynamicType)是不合法的。有誰知道如何實際做到這一點?總的來說,我試圖完成的是,無論該值是否爲可選,我都會將實際值轉換爲字符串,而不是可選。

+2

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

+0

非常感謝你。我不會找到的! – Feldur

回答

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 

} 
相關問題