Error: Type [AnyHashable: Any]? has no subscript members (Swift)
Error: Type [AnyHashable: Any]? has no subscript members (Swift)
我正在尝试使用 Snapchat 的登录工具包来允许用户使用 Snapchat 登录,但他们的文档给我一个错误。
复制文档得到 "Type '[AnyHashable : Any]?' has no subscript members. The error happens on the "let data = " 行。如果我强制解包资源,则错误移至下一行
let graphQLQuery = "{me{displayName, bitmoji{avatar}, 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"] 的行(错误 = "Type Any has no subscript members")。然后如果我尝试打开我,错误仍然存在。
例如:
let graphQLQuery = "{me{displayName, bitmoji{avatar}, 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
})
正在打印数据returns:
{
me = {
bitmoji = {
avatar = "{URL}";
};
displayName = "{NAME}";
externalId = "{ID}";
};
}
你必须告诉编译器静态集合类型,因为编译器要证明订阅能力。
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
}
}
我正在尝试使用 Snapchat 的登录工具包来允许用户使用 Snapchat 登录,但他们的文档给我一个错误。
复制文档得到 "Type '[AnyHashable : Any]?' has no subscript members. The error happens on the "let data = " 行。如果我强制解包资源,则错误移至下一行
let graphQLQuery = "{me{displayName, bitmoji{avatar}, 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"] 的行(错误 = "Type Any has no subscript members")。然后如果我尝试打开我,错误仍然存在。
例如:
let graphQLQuery = "{me{displayName, bitmoji{avatar}, 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
})
正在打印数据returns:
{
me = {
bitmoji = {
avatar = "{URL}";
};
displayName = "{NAME}";
externalId = "{ID}";
};
}
你必须告诉编译器静态集合类型,因为编译器要证明订阅能力。
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
}
}