Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.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
Ios 用JSON响应生成一个数组_Ios_Arrays_Alamofire_Swifty Json - Fatal编程技术网

Ios 用JSON响应生成一个数组

Ios 用JSON响应生成一个数组,ios,arrays,alamofire,swifty-json,Ios,Arrays,Alamofire,Swifty Json,我有以下的反应,以获得地区,但我需要一个单独的数组出这个与分离器 { "name" : "Abu Hail", "city_id" : 1, "pk" : 227, "city" : "Dubai" }, { "name" : "Academic City", "city_id" : 1, "pk" : 184, "city" : "Dubai

我有以下的反应,以获得地区,但我需要一个单独的数组出这个与分离器

 {
        "name" : "Abu Hail",
        "city_id" : 1,
        "pk" : 227,
        "city" : "Dubai"
      },
      {
        "name" : "Academic City",
        "city_id" : 1,
        "pk" : 184,
        "city" : "Dubai"
      },
      {
        "name" : "Al Barari",
        "city_id" : 1,
        "pk" : 185,
        "city" : "Dubai"
      },
      {
        "name" : "Al Barsha 1,2 & 3",
        "city_id" : 1,
        "pk" : 166,
        "city" : "Dubai"
      },
我怎样才能从下面的名称中用这个数组生成一个数组

 ["Abu Hail", "Academic City", "Al Barari", "Al Barsha 1,2 & 3"]
以下是我获得上述回复的代码

func getAreas(){
        let headers: HTTPHeaders = [
            "Authorization": "Token \(token!)",
            "Accept": "application/json"
        ]
        AF.request("\(staging.url)/api/addresses/areas/", method: .get, encoding: URLEncoding(), headers: headers).responseJSON { (response:DataResponse<Any>) in

            switch response.result {

            case let .success(value):

                let json = JSON(value)
                print("Areas Array: \(json)")
func getAreas(){
let头:HTTPHeaders=[
“授权”:“令牌\(令牌!)”,
“接受”:“应用程序/json”
]
AF.request(“\(staging.url)/api/addresses/areas/”,方法:.get,编码:URLEncoding(),头:头)。responseJSON{(响应:DataResponse)in
开关响应。结果{
成功案例(价值):
让json=json(值)
打印(“区域数组:\(json)”)

最好创建可编码的对象

// MARK: - AreaElement
struct AreaElement: Codable {
    let name: String?
    let cityID, pk: Int?
    let city: String?

    enum CodingKeys: String, CodingKey {
        case name
        case cityID = "city_id"
        case pk, city
    }
}
现在您可以使用
JSONDecoder
like直接解析

 fileprivate func retrieve<T: Decodable>(data: Data, type: T.Type) -> T? {
        let decoder = JSONDecoder()
        do {
            let model = try decoder.decode(type, from: data)
            return model
        } catch(let error) {
            return nil
        }
   }


    AF.request("\(staging.url)/api/addresses/areas/", method: .get, encoding: URLEncoding(), headers: headers).responseData { (response:DataResponse<Data>) in


  if let data =  response.data {
      let models = self.retrieve(data: data, type: [Area].self)

       // How you get name from model  with one line 
       let names = models?.map {$0.name} 
    }

       .......
fileprivate func检索(数据:数据,类型:T.type)->T{
let decoder=JSONDecoder()
做{
让model=try decoder.decode(类型,from:data)
回归模型
}捕捉(让错误){
归零
}
}
AF.request(“\(staging.url)/api/addresses/areas/”,方法:.get,编码:URLEncoding(),头:头)。中的responseData{(response:DataResponse)
如果let data=response.data{
让models=self.retrieve(数据:数据,类型:[Area].self)
//如何用一行从模型中获取名称
让name=models?.map{$0.name}
}
.......
希望它将有助于

使用以下方法创建阵列:

if let array = array as? [[String : Any]] {
   let namesArray = array.compactMap { $0["name"] } as? [String]
}

您可以将
array.compactMap{$0[“name”}写为?[String]