swift: 不能用字符串类型的索引下标 [Dictionary<String, AnyObject>] 类型的值

Posted

技术标签:

【中文标题】swift: 不能用字符串类型的索引下标 [Dictionary<String, AnyObject>] 类型的值【英文标题】:swift: cannot subscript a value of type [Dictionary<String, AnyObject>] with an index of type string 【发布时间】:2016-10-17 12:06:42 【问题描述】:

我正在尝试在 swift 3 中进行 json 解析。我收到了上述错误。我的解析技术如下:

if let responseData = data 
   do 
     let json = try JSONSerialization.jsonObject(with: responseData, options: JSONSerialization.ReadingOptions.allowFragments)
     if let dict = json as? [Dictionary<String, AnyObject>] 
        if let localityName = dict["name"] as? String ,let localityId = dict["_id"] as? String 

                        
                
    catch 
       print("could not serialize")            
   

我在行中收到错误:

if let localityName = dict["name"] as? String ,let localityId = dict["_id"] as? String

请告诉我如何解决此问题

【问题讨论】:

您正在创建一个ArrayDictionary。这是否有效。您需要使用Int 值来subscript @New16 我的回复是字典数组 @EICaptainv2.0 我的回复是字典数组 [Dictionary&lt;String, AnyObject&gt;] => 数组(字典)。但是当你做dict["name"] 时,你使用dict 作为字典,而不是你之前声明的数组。这就是为什么你有错误。如果您的响应是一系列字典,显然,将其称为array,而不是dict,这太令人困惑了。并以不同的方式访问其价值。 【参考方案1】:

dict 属性是一个字典数组,而不是字典。 您可以访问以下名称的第一个元素:

dict.first?["name"]

【讨论】:

【参考方案2】:

dict 实际上是arr。创建一个循环来遍历它

if let arr = json as? [Dictionary<String, AnyObject>] 
   for item in arr 
      if let localityName = item["name"] as? String,
         let localityId = item["_id"] as? String 
         print(localityName, localityId)
      
   

【讨论】:

以上是关于swift: 不能用字符串类型的索引下标 [Dictionary<String, AnyObject>] 类型的值的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 不能使用 SwiftyJSON 和 Alamofire 为“String”类型的值下标“String”类型的索引

不能使用 String 类型的索引为 NSDictionary 类型的值下标。从 Swift 2.3 -> 3.2 转换时

带有 AnyObject 下标的 Realm.io

不能用“item”类型的索引为“[item]”类型的值下标

在 swift 中将 String 类型数组转换为 Float 类型数组 不能将类型 'String' 的值分配给类型 'Double' 的下标。

5字典dic