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

标签 swift httprequest alamofire completion

我正在使用 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
}

我怎样才能实现它?我可以像传递参数理论那样实现它吗?

最佳答案

我不太确定您的 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
        })
    }

关于swift - 如何从方法返回 alamofire Http 请求的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44196376/

相关文章:

ios - 上传图片: reduce resolution without loosing quality (Swift)

ios - 在 Swift 中 if let 赋值中 where 的用法

ios - 如何在WKWebview中添加观察者来播放和暂停音频文件的 Action ?

perl - 如何在 Perl 中拦截 HTTP 请求?

android - Android中webview与java http客户端的http session同步

swift - 在控制台中打印字符串结果为 (Function)。为什么?

ios - Alamofire 中的调用约定,Alamofire.request

ios - 推送通知不会快速调用 didReceiveRemoteNotification

ios - 使用其他类的 UIView 函数会导致崩溃

JMeter 在特定条件下启用/禁用 HTTP 请求采样器