类型'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的主要内容,如果未能解决你的问题,请参考以下文章
swift 3 Type 'Any' 没有下标成员? [复制]
Swift:将 oldArray[][] 复制到 newArray[][] 会导致错误(类型 'Any' 没有下标成员)