Swift 正在从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

我从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
    }

通过添加完成块修复了它

        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完成呢?您不需要返回项目,您可以通过数组访问所有项目。您也不需要调度块。