Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 无法遍历字典数组中的数组_Swift_Xcode_Nsarray_Nsdictionary_Nsjsonserialization - Fatal编程技术网

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个元素是位置的总数,但是我已经简化了响应字符串,

在swift中将响应解析为可用对象时遇到问题

基本上,这就是我得到的响应(用于查看目的的简化数据)

收到回复后,我会执行以下操作:

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)