首页 > 解决方案 > 无法在 WebService 调用请求中使用 NSData 强制转换 NSDicationry

问题描述

试图包装来自 WebService 的 Codable 响应数据使用 cocoa pod pod 'WebService', '~> 0.4'

var webServiceObject : WebService = WebService()

webServiceObject.sendRequest(URLString, parameters: parameters as NSDictionary?, requestType: .post,  success: {response,data in
            
    do{
    // Handle data when request Success
            let jsonDecoder = JSONDecoder()
                do {
                    
                let result = try jsonDecoder.decode([ResponseModelValue].self, from: data as! Data)
                    print(response?.statusCode as Any)
                   print("Success Response Value", result)
                }
            } catch {
                print(error)
             }
            }, failed: {
                (response : HTTPURLResponse?, ResponseDict : Any?) in
                print(response?.statusCode as Any)

                print("Failed Response Dictionary", ResponseDict!)
            
                // Handle data when request fails
                
            }, encoded: false )

我收到以下错误

无法将“__NSDictionaryI”(0x10c81ab38)类型的值转换为“NSData”(0x10c819620)。

谁能建议我在这里做错了什么,所以我可以用可编码的方式解析正确的响应数据[ResponseModelValue]

标签: iosswiftweb-servicesresponsecodable

解决方案


查看该库后,如果可能的话,它似乎会将响应转换为字典并回退到返回数据。 https://github.com/kansaraprateek/WebService/blob/master/WebService/Classes/WebService.swift#L281

似乎没有办法配置该行为。该库也是在创建之前Codable创建的。您可能需要联系库所有者进行修复,派生 repo 并自行修复,或者切换到使用 URLSession,因为您发布的代码与 URLSession 调用基本相同。


推荐阅读