无法将“DataResponse<Any>”类型的值转换为预期的参数类型“Data”

Posted

技术标签:

【中文标题】无法将“DataResponse<Any>”类型的值转换为预期的参数类型“Data”【英文标题】:Cannot convert value of type 'DataResponse<Any>' to expected argument type 'Data' 【发布时间】:2019-07-08 14:59:46 【问题描述】:

我正在向一个网站发出一个简单的 post 请求,该网站发回如下所示的 JSON:


    Account = "blah blah";
    Password = "blah blah";

这是请求。

@IBAction func submitButtonClicked(_ sender: Any)
                AF.request("https://companywebsite.com", method: .post, parameters: parameters, encoding:JSONEncoding.default)
                .responseJSON response in
                    let json = try? JSON(data: response)
                

我收到以下编译错误:

Cannot convert value of type 'DataResponse<Any>' to expected argument type 'Data'

我使用 Alamofire 发送请求并使用 SwiftyJSON 解析它。我以前从未使用过 Swift 或任何一个库,所以我真的很想知道我需要做些什么来解决这个问题。

我想提取帐户和密码以存储在单独的变量中。我尝试按照其他教程进行操作,但没有成功。如果有人可以帮助我,我将不胜感激。

【问题讨论】:

【参考方案1】:

您需要responseData 而不是responseJSON

AF.request("https://companywebsite.com", method: .post, parameters: parameters, encoding:JSONEncoding.default)
            .responseData  response in 
   guard let data = response.data else  return   
   let json = try? JSON(data:data)
   if let acc = json?["Account"].string 
     print(acc)
   
   if let pass = json?["Password"].string 
     print(pass)
   

其他变体

Alamofire.request("https://companywebsite.com", method: .post, parameters: [:], encoding:JSONEncoding.default)
    .responseJSON  response in
    let json = try? JSON(response.result.value!)

【讨论】:

感谢@Sh_Khan,我现在如何使用 SwiftyJson 从“json”中提取帐户和密码? 你能发布预期的响应json结构吗 我的问题中的第一段代码正是 JSON 的样子,只是长随机字符串而不是“blah blah”

以上是关于无法将“DataResponse<Any>”类型的值转换为预期的参数类型“Data”的主要内容,如果未能解决你的问题,请参考以下文章

无法将 createdAt 和 updatedAt 保存为日期时间值,也无法将后端保存为前端

C# 无法将类型为“System.Byte[]”的对象强制转换为类型“System.Data.DataTable

无法将类型为“System.Collections.Generic.List`1[EPMS.Domain.SingleItem]”的对象强制转换为类型“EPMS

无法将 .json 文件从 CSV 下载到 JSON 转换并且无法将 JSON 转换为 CSV

无法将 ReactiveUI 添加到 NUnit 测试项目

“无法将图像数据写入路径” - Laravel 图像干预