无法将“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”的主要内容,如果未能解决你的问题,请参考以下文章