Swift 正在从Alamofire添加数据不起作用
我从alamofire获得数据,但它没有附加。我认为这是因为它是异步发生的。只是在我的代码中找不到解决这个问题的最佳方法。提前谢谢你的帮助Swift 正在从Alamofire添加数据不起作用,swift,asynchronous,alamofire,Swift,Asynchronous,Alamofire,我从alamofire获得数据,但它没有附加。我认为这是因为它是异步发生的。只是在我的代码中找不到解决这个问题的最佳方法。提前谢谢你的帮助 var allItems = [Item](); @discardableResult func createItem() -> Item { let newItem = Item(name: "Grocery", description: "Milk Egg Cheese", priorit
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
}
通过添加完成块修复了它
AF.request("https://mobile-app-i.herokuapp.com/list/list").responseJSON { response in
switch response.result {
case .success(let value):
DispatchQueue.main.async {
print(type(of: value))
if let value = value as? [NSDictionary] {
completionHandler(value)
}
}
case .failure(let error):
print(error)
}
}
}
这样打电话
fetchData(completionHandler: {(returnedData)-> Void in
//Do whatever you want with your returnedData JSON data.
//when you finish working on data you can update UI
for (i, d) in returnedData.enumerated() {
print(d["description"])
self.itemStore.createNewItem(name: d["name"]! as! String, description: d["description"]! as! String, priority: d["priority"]! as! String)
}
一个简单的修复方法是使用完成块等待数据传递。问题是newItem在设置之前返回。看是有道理的。但是我如何等待alamofire完成呢?您不需要返回项目,您可以通过数组访问所有项目。您也不需要调度块。