错误:键入 [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 值

在 SwiftUI 上的 Firebase 中使用 updateData 函数时出错

在反应 TypeScript 中键入输入的键值 [重复]

无法转换任何类型?要键入 AnyObject?从 swift 3 转换为 swift 4 时