错误:类型 [AnyHashable: Any]? 没有下标成员 (Swift)



我正在尝试使用Snapchat的登录工具包允许用户使用Snapchat登录,但是他们的文档给了我一个错误。

复制文档会让我得到一个"类型'[AnyHashable : Any]?'没有下标成员。错误发生在"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
})

如果我解开数据资源和数据,则错误将移动到我尝试设置我的行 = data["me"](错误 = "Type Any 没有下标成员"(。然后,如果我尝试打开包装,错误仍然存在。

前任:

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
    })

打印数据返回:

{
    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
      }
}

最新更新