我有一个简单的Alamofire请求,我用SwiftyJSON解析它。这是代码:
var fetchedData: [TestDB]? = []
func fetchData() {
Alamofire.request(url!, method: .get).validate().responseJSON { response in
switch response.result {
case .success(let value):
let json = JSON(value)
self.fetchedData = [TestDB]()
for dict in json["articles"].array! {
let data = TestDB()
if let image = dict["urlToImage"].string {
data.imageUrls = image
}
if let titlee = dict["title"].string {
data.titlee = titlee
}
if let desc = dict["description"].string {
data.desc = desc
}
self.fetchedData?.append(data)
// If i print fetchedData here, i can see it has right values.
// print(fetchedData)
}
case .failure(let error):
print(error)
}
}
// If i try to print fetchedData here, it's empty.
}
正如我在代码中所说,我无法追加并使用我的数据。我认为 Alamofire是异步的东西。但无法弄清楚原因。任何帮助表示赞赏。谢谢!
答案 0 :(得分:2)
当您使用异步方法时,您可以继续进行某些操作,例如:
回调:
func fetchData(completion: (result: [TestDB]) -> ) {
Alamofire.request(url!, method: .get).validate().responseJSON { response in
self.fetchedData = [TestDB]()
// fill self.fetchedData then:
completion(self.fetchedData)
}
})
你调用fetchData的地方:
self.fetchData(completion: {
// update collectionview?
self.collectionView.reloadData()
})
<强> RAC:强>
您可以找到所有文档here。
<强>加:强>
一些建议:
self.fetchedData = TestDB不是必需的,可能就足够了self.fetchData.removeAll()
使用ObjectMappar将任何json响应映射到对象