类型“任何”没有下标成员[重复]

Posted

技术标签:

【中文标题】类型“任何”没有下标成员[重复]【英文标题】:Type ´Any´ has no subscript members [duplicate] 【发布时间】:2016-10-03 21:57:39 【问题描述】:

我有用于 swift2.2 的 json 解析代码,但是当我将它用于 Swift 3.0 时出现错误(“Any”类型没有下标成员),谁能帮我转换代码。

do         
                let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers)

                if json is [String: AnyObject] 
                    print(json)

                    if let error = json["error"] as? String 
                        print(error);
                     else if let items = json["items"] as? [[String: AnyObject]] 

                        for item in items 
                            print(item)

                            let book_id = item["id"] as? String

                            if let volumeInfo = item["volumeInfo"] as? [String: AnyObject] 
                                let book_title = volumeInfo["title"] as? String
                                DispatchQueue.main.async(execute:  () -> Void in
                                    self.lblDataInfo.text = "ISBN: "+self.currentISBN!+"  ID:"+book_id!
                                    self.lblDataType.text = book_title
                                )
                            

                            break // for now, only show first
                        

                     else 
                        DispatchQueue.main.async(execute:  () -> Void in
                            self.lblDataInfo.text = "ISBN: "+self.currentISBN!+"  Not identified"
                            self.lblDataType.text = ""
                        )
                    
                

             catch let jsonError 
                print(jsonError)
            

            
            task.resume()

        

【问题讨论】:

相关一栏有很多相关问题。 【参考方案1】:

这:if json is [String: AnyObject] 正在检查 json 是否是字典,但不会将其转换为字典,因此当您尝试在此处将其作为字典访问时:json["error"] 您正在尝试将其作为字典。

相反,您只需将其转换为具有正确类型的新变量:

if let jsonDictionary = json as? [String : AnyObject]

【讨论】:

【参考方案2】:

好像是通过了json数据,但不知道数据是什么类型,因为目前它的类型是Any

if json is [String: AnyObject] 
                print(json)
let jsonData = json as! NSDictionary // or if you want to be more specific ,'json as! [String: AnyObject]' but u will have to cast the value of your dict 'AnyObject' later on

现在,数据不是“Any”类型而是“NSDictionary”类型

如果你想测试它,你可以在print(json) 行设置一个断点,运行代码后,在控制台中输入po json as! NSDictionary,这样你就可以看到 NSDictionary 是否是正确的类型来转换你的 json数据

【讨论】:

以上是关于类型“任何”没有下标成员[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为firebase数据库创建用户对象时,类型“任何”没有下标成员[重复]

输入“任何?”没有下标成员[重复]

在 swift 3 中打印 json 时出现任何下标成员错误 [重复]

输入“任何?”没有下标成员[重复]

类型“Any”没有下标成员/Swift 3 [重复]

类型“any”在alamofire 4 iOS swift中没有下标成员[重复]