类型'Any'没有下标成员Swift 3

Posted

技术标签:

【中文标题】类型\'Any\'没有下标成员Swift 3【英文标题】:Type 'Any' has no subscript members Swift 3类型'Any'没有下标成员Swift 3 【发布时间】:2017-02-27 22:22:02 【问题描述】:
let message = JSON((userInfo["aps"]?["alert"])!).stringValue

当我尝试构建时,我得到“Type 'Any' has no subscript members”

尝试转换为 Swift 3,但似乎无法解决此错误。

【问题讨论】:

userInfo是什么类型? 它是 [AnyHashable: Any] 并且 JSON 构造函数需要一个字符串? 是的,没错。我已经用 [String: AnyObject] 替换了它,我不再收到构建错误,而是收到一堆警告。 【参考方案1】:

Frankies 答案的另一种解决方案是这个 oneliner:

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

如果没有消息(或者如果 json 结构不符合您的预期),最后您有消息或空字符串...

【讨论】:

【参考方案2】:

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

您不能在Any 上调用下标,即["alert"]。所以它会抱怨。

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

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

【讨论】:

您可以将let message ... 添加到 if 语句中,然后一次性解开它们 @Alexander 当然,你可以做很多事情。这是一个开始使用 Swift 类型转换的 OP 的简单示例。

以上是关于类型'Any'没有下标成员Swift 3的主要内容,如果未能解决你的问题,请参考以下文章

类型“Any”没有下标成员/Swift 3 [重复]

类型 Any 没有下标成员 Swift 3.0

类型 Any 没有下标成员 Swift 3.0 中的错误?

swift 3 Type 'Any' 没有下标成员? [复制]

Swift:将 oldArray[][] 复制到 newArray[][] 会导致错误(类型 'Any' 没有下标成员)

Swift 3 Type 'Any' 没有下标成员