如何测试Any是否实际上是可选的? (Swift)
问题描述:
我正在写一些调试代码,我需要传递一个Any类型的参数。出于打印目的,我想打开参数值,如果它是可选的,但我不知道如何测试 - 我能想到的每种语法形式都被编译器拒绝。例如,如何测试Any是否实际上是可选的? (Swift)
switch val {
case as Optional<Any>:
.
.
和各种形式let
(包括试图.dynamicType
)是不合法的。有谁知道如何实际做到这一点?总的来说,我试图完成的是,无论该值是否为可选,我都会将实际值转换为字符串,而不是可选。
答
马丁是绝对正确的。从链接的帖子,略有修改,因为我想零不同的回报:
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
}
比较http://stackoverflow.com/a/32516815/1187415。 –
非常感谢你。我不会找到的! – Feldur