如何在Swift中遍历Alamorefire数据响应?

时间:2018-07-09 15:35:34

标签: json swift alamofire

我试图在我的项目中第一次使用alamofire。我有点困惑,但是如何遍历数据响应并将结果存储在数组中。

我有一个数据模型来捕获包含2个属性(名称,描述)的数据。

import Foundation

class categoryModel {
    var name: String?
    var description: String?

    init(name: String?, description: String?) {
        self.name = name
        self.description = description
    } 
}

然后我有了一个TableViewController,它创建了categoryModel类型的数组。然后,在viewDidLoad中,调用我的API并捕获一些数据。这是我努力的一部分。我想将响应值存储在数组中。

var categories = [categoryModel]()

override func viewDidLoad() {

Alamofire.request("http://my.custom.api.url", encoding: JSONEncoding.default)
        .responseJSON { response in
            //print(response)

            if let json = response.result.value {

            }


    }
}

我已经打印了响应对象并得到以下信息:

SUCCESS: (
    {
        "category_number" = 4;
        description = "";
        name = "Traditional Curries";
    },
    {
        "category_number" = 3;
        description = "Traditional starters";
        name = Starters;
    }
)

3 个答案:

答案 0 :(得分:4)

请参阅Alamofire文档here。 正如它暗示的那样,

var categories = [categoryModel]()

Alamofire.request("http://my.custom.api.url", encoding: JSONEncoding.default)
    .responseJSON { response in
     if let json = response.result.value as? [[String: AnyObject]] {
         categories = json.compactMap({ return categoryModel(name: $0["name"], description: $0["description"]) })
     }
}

此外,我建议使用CategoryModel代替categoryModel,即使用CamelCase作为类名。

答案 1 :(得分:0)

您的json对象有多个错误,我将假设您有一个键名为“ arr”的顶级json数组。在数组中,每个对象都有三个键。所以你会写:

let topLvlArray = json["arr"] as! [Any]

for obj in topLvlArray as! [String:Any] {
    let category = obj.category_number
    let description = obj.description 
    let name = obj.name
    //construct your categoryModel object
}

答案 2 :(得分:0)

首先编写一个用于获取json数据的函数

  override func viewDidLoad() {
      getJsonData()
}
var categories = [categoryModel]()

func getJsonData(){
Alamofire.request("http://my.custom.api.url", encoding: JSONEncoding.default)
        .responseJSON { response in
            //print(response)

            if let json = response.result.value {
             let name = json["name"].stringvalue
             let description = json["description"].stringvalue
             let dataAll = categoryModel(name: name!, description: description!)
             categories.append(dataAll)
             print(categories.count)

            }


    }
}