如何使用序列化为数据的响应数据处理程序(通过 AlamoFire 的 Swift 3)

Posted

技术标签:

【中文标题】如何使用序列化为数据的响应数据处理程序(通过 AlamoFire 的 Swift 3)【英文标题】:How to use Response Data Handler Serialized into Data (Swift 3 via AlamoFire) 【发布时间】:2017-08-04 04:42:00 【问题描述】:

大家有什么建议吗?我想用func通过Alamofire调用API,但是遇到了错误 无法将类型“(DataResponse)->()”的值转换为预期的参数类型“(DataResponse)-> Void”

代码如下:

func authorize(emailAddress: String, password: String)

    let base_url = ApiRoute.userLogin.url

    let params: [String: Any]? = [
        "email": emailAddress,
        "password": password
    ]

    let headers: HTTPHeaders = [
        "Content-Type": CONTENT_TYPE,
        "devtoken": API_KEY,
        "userlang": USER_LANG
    ]

    Alamofire.request(base_url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers)
        .validate()
        .responseJSON  (response: DataResponse<ApiLoginResult>) in
            switch(response.result) 
            case .success(_):
                if let data = response.result.value
                    print(response.result.value)
                
                break
            case .failure(_):
                print(response.result.error)
                break
            
    

谁能告诉我如何在我的工作中实现这一点

    // Response Data Handler - Serialized into Data
    func responseData(queue: DispatchQueue?, completionHandler: @escaping (DataResponse<Data>) -> Void) -> Self

【问题讨论】:

这里发帖代码不是截图。 那么你的对象映射有问题吗? 是的,在对象映射中,如果我使用带有 (response : DataResponse) 到 (response) 的简单 alamofire,它就可以工作,但我需要传递数据,因为我正在使用对象映射 替换为responseJSON (response:DataResponse&lt;Any&gt;) in 检查我的答案。 【参考方案1】:

使用 ObjectMapper 你可以像下面那样映射对象。希望你能得到你的想法。

Alamofire.request(base_url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers)
        .validate()
        .responseJSON  (response) in
            switch(response.result) 
            case .success(_):
                if let data = response.result.value
                  print(response.result.value)

                   //Object mapping
                    let loginResult = Mapper<ApiLoginResult>().map(data)

                
                break
            case .failure(_):
                print(response.result.error)
                break
            
    

【讨论】:

让 loginResult = Mapper().map(JSONObject: data) 谢谢兄弟【参考方案2】:

GetRequestAlamofire swift3 代码中

func getWebServicesFromAlamofireGetRequest() 

    self.myActivity.startAnimating()
    Alamofire.request("http:xxxx.com", method: .get, parameters: ["":""], encoding: URLEncoding.default, headers: nil).responseJSON  (response:DataResponse<Any>) in

        self.myActivity.stopAnimating()
        switch(response.result) 
        case .success(_):
            if response.result.value != nil 
                let jsonResponce = response.result.value as! NSDictionary

                print(jsonResponce)
            
            break

        case .failure(_):
            print(response.result.error!)
            break

        
    

【讨论】:

【参考方案3】:

制作

(response : DataResponse<APILoginResponse>)

成为

(response)

它应该可以工作。

【讨论】:

【参考方案4】:

检查以下 Alamofire 代码

let strURL:String = "http://xxxx"
let parameters: Parameters = ["keyword": "current_timestamp"]

Alamofire.request(strURL, method: .post, parameters: parameters, encoding: URLEncoding.default).responseJSON  (response) in
    print(response.data!)
                print(response.result)

                if let JSON = response.result.value 
                    print("JSON: \(JSON)")
                

【讨论】:

以上是关于如何使用序列化为数据的响应数据处理程序(通过 AlamoFire 的 Swift 3)的主要内容,如果未能解决你的问题,请参考以下文章

Kotlinx 将 JSON Array 序列化为数据类

将JSON字符串反序列化为指定的.NET对象类型

如何使用json.net自定义反序列化为对象

如何将请求响应对象序列化为 HAR

如何在 .NET 中反序列化为本地集合?

如何使用 System.Text.Json API 将流反序列化为对象