Ошибка набора в Snap Snap Kit (Swift)
Копирование документации дает мне "Тип" [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"] (error = "Тип 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}";
};
}
1 ответ
Это потому что [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
объект.