如何从方法返回 alamofire Http 请求的结果?

Posted

技术标签:

【中文标题】如何从方法返回 alamofire Http 请求的结果?【英文标题】:How to return the result of alamofire Http request from a method? 【发布时间】:2017-05-26 07:51:15 【问题描述】:

我正在使用 alamofire 和 swift 3。我想返回从 Http 请求中获得的数据。目前我正在使用完成处理程序。

func SendHttpRequest(params: AnyObject, header_obj: [String: String], url:String, http_method:HTTPMethod, completion: @escaping (_ response_value: JSON, _ error_type: String)->()) 

        Alamofire.request(BASE_URL + url, method: http_method, parameters: (params as! [String : Any]) , encoding: URLEncoding.default, headers: header_obj).responseJSON  (response:DataResponse<Any>) in

            switch(response.result) 
            case .success( _ ):

                if let jsonValue = response.result.value 
                    let json = JSON(jsonValue)
                    completion(json, "")
                
                break

            case .failure(_):
                print(response.result.error!)
                completion(JSON(response.result.value!), "NO_INT")
                //"The Internet connection appears to be offline."
                break

            
        //Alamofire

    //SendHttpRequest

但我想要的是返回我通过 Http 请求获得的任何结果。 例如:-

func GetUsers() -> [Users]
   //HERE IT SHOULD EXCUTE THE HTTP REQUEST AND RETURN THE USERS LIST

我怎样才能实现它?我可以像方法传递作为参数理论一样实现它吗?

【问题讨论】:

【参考方案1】:

我不完全确定您的 json 的结构或您的用户结构/类的外观,但您应该这样做类似的事情。如果我理解正确你想做什么。

 class NetworkingStuff 
        func SendHttpRequest(params: AnyObject, header_obj: [String: String], url:String, http_method:HTTPMethod, success:  @escaping (Any) -> (), failure: @escaping (error?) -> ()) 

                Alamofire.request(BASE_URL + url, method: http_method, parameters: (params as! [String : Any]) , encoding: URLEncoding.default, headers: header_obj).responseJSON  (response:DataResponse<Any>) in

                    switch(response.result) 
                    case .success( _ ):

                        if let jsonValue = response.result.value 
                            let json = JSON(jsonValue)
                            success(json, "")
                        
                        break

                    case .failure(_):
                        print(response.result.error!)
                        failure(JSON(response.result.value!), "NO_INT")
                        //"The Internet connection appears to be offline."
                        break

                    
                
            
        

处理数据:

  func GetUsers() -> [Users]? 
       networkingStuff.sendHttpRequest(params: something, header_obj: dict, url: URL, http_method: Alamofire.post, success:  (responseData: Any) -> () in
              if let data = responseData as? [String: Any], let users = data["users"] as? [String: Any] 
                  if let userArray = Users(dict: users) 
                      return userArray
                   else 
                      return nil
                  
              

        , failure:  (error: Any?) -> () in
            return nil
        )
    

【讨论】:

以上是关于如何从方法返回 alamofire Http 请求的结果?的主要内容,如果未能解决你的问题,请参考以下文章

在 Alamofire 中检测缓存的响应

如何编写返回响应的alamofire请求函数?

Alamofire 的 Swift 扩展方法返回 SwiftyJSON 结果

对本地网络服务器的 Alamofire http 请求

带有嵌套参数的 Alamofire POST 请求不返回任何内容

如何从 alamofire 发布请求中使用 switfyJson 填充 UItableview 中的单元格