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
请告诉我如何解决此问题
【问题讨论】:
您正在创建一个Array
的Dictionary
。这是否有效。您需要使用Int
值来subscript
。
@New16 我的回复是字典数组
@EICaptainv2.0 我的回复是字典数组
[Dictionary<String, AnyObject>]
=> 数组(字典)。但是当你做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 转换时
在 swift 中将 String 类型数组转换为 Float 类型数组 不能将类型 'String' 的值分配给类型 'Double' 的下标。