从 Alamofire 附加数据不起作用 [重复]

Posted

技术标签:

【中文标题】从 Alamofire 附加数据不起作用 [重复]【英文标题】:Appending Data from Alamofire Not working [duplicate] 【发布时间】: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 块。 【参考方案1】:

通过添加完成块修复它

        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)
              
               
            

【讨论】:

以上是关于从 Alamofire 附加数据不起作用 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

PUT NSData 从 S3 到 PreSigned URL,Alamofire.upload(...) 在 iOS 8 上不起作用

使用 alamofire 发布 form_data 数据不起作用

带有 MultiPart 表单数据中的参数的图像上传在 Alamofire 4.0 中不起作用

使用 Alamofire 将图像上传到服务器不起作用

请求 REST POST API 在 Postman 中工作,但在 Alamofire 中不起作用

iOS - Alamofire v2 基本身份验证不起作用