错误:键入 [AnyHashable: Any]?没有下标成员 (Swift)
Posted
技术标签:
【中文标题】错误:键入 [AnyHashable: Any]?没有下标成员 (Swift)【英文标题】:Error: Type [AnyHashable: Any]? has no subscript members (Swift) 【发布时间】:2018-08-08 16:38:15 【问题描述】:我正在尝试使用 Snapchat 的登录工具包来允许用户使用 Snapchat 登录,但他们的文档给了我一个错误。
复制文档会给我一个“类型'[AnyHashable:Any]?'没有下标成员。错误发生在“let data =”行。如果我强制展开资源,则错误将移至下一行
let graphQLQuery = "medisplayName, bitmojiavatar, externalId"
let variables = ["page": "bitmoji"]
SCSDKLoginClient.fetchUserData(withQuery: graphQLQuery, variables: variables, success: (resources: [AnyHashable: Any]?) in
let data = resources["data"] //error here
let me = data["me"]
let displayName = me["displayName"]
let bitmoji = me["bitmoji"]
let bitmojiAvatarUrl = bitmoji["avatar"]
, failure: (error: Error?, isUserLoggedOut: Bool) in
// handle error
)
如果我解开数据资源和数据,则错误会移动到我尝试设置 me = data["me"] (error = "Type Any has no subscript members") 的行。然后,如果我尝试打开包装,错误仍然存在。
例如:
let graphQLQuery = "medisplayName, bitmojiavatar, externalId"
let variables = ["page": "bitmoji"]
SCSDKLoginClient.fetchUserData(withQuery: graphQLQuery, variables: variables, success: (resources: [AnyHashable: Any]?) in
guard let response = resources else return
guard let data = response["data"] else return
print(data)
let me = data["me"] // error here
let displayName = me["displayName"]
let bitmoji = me["bitmoji"]
let bitmojiAvatarUrl = bitmoji["avatar"]
, failure: (error: Error?, isUserLoggedOut: Bool) in
// handle error
)
打印数据返回:
me =
bitmoji =
avatar = "URL";
;
displayName = "NAME";
externalId = "ID";
;
【问题讨论】:
guard let me = data["me"] as? [String: Any] else return
?
【参考方案1】:
你必须告诉编译器静态集合类型,因为编译器要证明订阅能力。
if let data = resources["data"] as? [String:Any],
let me = data["me"] as? [String:Any]
let displayName = me["displayName"] as! String
if let bitmoji = me["bitmoji"] as? [String:Any]
let bitmojiAvatarUrl = bitmoji["avatar"] as! String
【讨论】:
以上是关于错误:键入 [AnyHashable: Any]?没有下标成员 (Swift)的主要内容,如果未能解决你的问题,请参考以下文章
将 userInfo [AnyHashable: Any] 转换为 [String: Any]
无法使用“Any?”类型的索引为“[AnyHashable:Any]”类型的值下标
Dictionary<AnyHashable: Any> 在 Swift 3 中 Any 可能持有 nil 值