【问题标题】: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] 替换了它,我不再收到构建错误,而是收到一堆警告。

标签: ios swift3 xcode8


【解决方案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 的简单示例。
    猜你喜欢
    • 1970-01-01
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多