我试图在我的项目中第一次使用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;
}
)
答案 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)
}
}
}