2017-02-27 56 views
0
let message = JSON((userInfo["aps"]?["alert"])!).stringValue 

当我尝试建立我得到“类型‘任何’没有标会员”类型“任何”无标会员斯威夫特3

尝试转换斯威夫特3,但似乎无法来解决这个错误。

+1

什么类型是'userInfo'? –

+0

它是[AnyHashable:Any] –

+0

和JSON构造函数需要一个字符串? –

回答

1

一个替代的解决方案,以Frankies答案是这样oneliner:

let message = (userInfo["aps"] as? [AnyHashable: Any])?["alert"] as? String ?? "" 

在你有消息或空字符串结束时,如果没有消息(或者如果JSON结构是不是你所期望的)...

+0

非常好。这工作,感谢解释! –

+0

很高兴我可以帮助 - 不客气:) –

1

编译器不知道userInfo["aps"]是什么类型。所以它假设它是Any

你不能调用下标,即["alert"]Any。所以它抱怨。

您需要将其解包为可散列的东西。一个例子:

if let dict = userInfo["aps"] as? [String : AnyObject] { 
    let message = dict["alert"] 
} 
+0

您可以将'let message ...'添加到if语句中,并将它们一起解包 – Alexander

+0

@Alexander当然,您可以做很多事情。这是OP开始使用Swift类型转换的简单示例。 – Frankie