Swift 无法遍历字典数组中的数组
在swift中将响应解析为可用对象时遇到问题 基本上,这就是我得到的响应(用于查看目的的简化数据) 收到回复后,我会执行以下操作:Swift 无法遍历字典数组中的数组,swift,xcode,nsarray,nsdictionary,nsjsonserialization,Swift,Xcode,Nsarray,Nsdictionary,Nsjsonserialization,在swift中将响应解析为可用对象时遇到问题 基本上,这就是我得到的响应(用于查看目的的简化数据) 收到回复后,我会执行以下操作: let dict = try! JSONSerialization.jsonObject(data: responseData!, options: .allowFragments) as? [[String:Any]] ?? [[String:Any]]() 这就产生了下面的字典(很抱歉,我不能打印屏幕。加上这44个元素是位置的总数,但是我已经简化了响应字符串,
let dict = try! JSONSerialization.jsonObject(data: responseData!, options: .allowFragments) as? [[String:Any]] ?? [[String:Any]]()
这就产生了下面的字典(很抱歉,我不能打印屏幕。加上这44个元素是位置的总数,但是我已经简化了响应字符串,正如我上面所说的)
我的问题是,我无法访问每个位置
字典。我试过反复使用dict[“Places”]
,但这似乎不起作用,我不理解,因为它是一个NSArray
我可能遗漏了一些简单的东西,但我似乎无法理解
欢迎任何帮助
谢谢 你可以试试
// MARK: - Root
struct Root: Codable {
let co2: Int
let places: [Place]
let direction: String
enum CodingKeys: String, CodingKey {
case co2 = "CO2"
case places = "Places"
case direction = "Direction"
}
}
// MARK: - Place
struct Place: Codable {
let name, code: String
let type: Int
let coordX, coordY: Double
let provider: String
let lines: String?
enum CodingKeys: String, CodingKey {
case name = "Name"
case code = "Code"
case type = "Type"
case coordX = "CoordX"
case coordY = "CoordY"
case provider = "Provider"
case lines = "Lines"
}
}
放弃JSONSerialization,使用Codable进入现实世界。我在其他情况下使用Codable,但在这里不能使用它。它抛出一个错误,表示它需要字典,但得到了一个数组。@kyrers您可以使用Root.self
而不是[Root]。self
非常感谢!
// MARK: - Root
struct Root: Codable {
let co2: Int
let places: [Place]
let direction: String
enum CodingKeys: String, CodingKey {
case co2 = "CO2"
case places = "Places"
case direction = "Direction"
}
}
// MARK: - Place
struct Place: Codable {
let name, code: String
let type: Int
let coordX, coordY: Double
let provider: String
let lines: String?
enum CodingKeys: String, CodingKey {
case name = "Name"
case code = "Code"
case type = "Type"
case coordX = "CoordX"
case coordY = "CoordY"
case provider = "Provider"
case lines = "Lines"
}
}
let res = try JSONDecoder().decode([Root].self,from:data)
print(res.places)