【发布时间】:2020-12-10 01:24:25
【问题描述】:
我从 alamofire 获取数据,但它没有附加。我认为这是因为它正在发生异步。只是想不出在我的代码中解决这个问题的最佳方法。提前感谢您的帮助。
var allItems = [Item]();
@discardableResult func createItem() -> Item {
let newItem = Item(name: "Grocery", description: "Milk Egg Cheese", priority: "High")
// let newItem1 = Item(name: "Test", description: "Tes", priority: "Test")
AF.request("https://mobile-app-i.herokuapp.com/list/list").responseJSON { response in
switch response.result {
case .success(let value):
DispatchQueue.main.async {
if let value = value as? [NSDictionary] {
for d in value {
print(d["description"])
let dataItem = Item(name: d["name"]! as! String, description: d["description"]! as! String, priority: d["priority"]! as! String)
self.allItems.append(dataItem)
}
}
}
case .failure(let error):
print(error)
}
}
// allItems.append(newItem1)
allItems.append(newItem)
return newItem
}
【问题讨论】:
-
一个简单的解决方法是使用完成块等待数据传递。
-
问题是newItem在可以设置之前就返回了。见programmingios.net/…
-
有道理。但是我如何等待 alamofire 完成。
-
您不需要返回项目,您可以通过数组访问所有项目。你也不需要 Dispatch 块。
标签: swift asynchronous alamofire