0

复制文档会给我一个“类型'[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
    })

如果我打开数据资源和数据,则错误将移动到我尝试设置 me = data["me"] (error = "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
        })

打印出数据返回:

{
    me =     {
        bitmoji =         {
            avatar = "{URL}";
        };
        displayName = "{NAME}";
        externalId = "{ID}";
    };
}
4

1 回答 1

0

那是因为这[AnyHashable: Any]?就是optional它给出错误的原因

“输入'[AnyHashable:Any]?' 没有下标成员

因此,您需要使用if let如下所示的条件包装它:

if let response = resources {
    let data = response["data"] //then cast your objects here
}

或者你可以使用guard let

guard let response = resources else { return }

之后你可以使用response对象。

于 2018-08-08T06:07:37.047 回答