【问题标题】:How can I convert AFDataResponse<Data> into Data in order to render an Image using bytes?如何将 AFDataResponse<Data> 转换为 Data 以使用字节呈现图像?
【发布时间】:2020-12-15 01:12:11
【问题描述】:

我创建了一个服务文件,以便处理我正在微调的天气应用程序中的所有网络。在这个服务文件中,我使用协议,以便从 GET 请求中将检索到的数据返回到相应的视图控制器。

在我的代码重构过程中,为了学习,我决定学习如何使用 Alamofire,而不是使用 URLSessions。

我的一个 GET 请求检索到图像(太阳、云、雨云等),具体取决于某个城市的天气(这是我提交 GET 请求的 URL 示例: http://openweathermap.org/img/wn/03n@2x.png.

在导入 Alomofire 之前,我会获取该图像的字节,并在 UIImage 中渲染字节,如下所示:

self.weatherIcon.image = UIImage(data: result)

这工作得很好。但是现在,当我使用 Alamofire 处理我的请求时,我遇到的挑战是我无法将 AFDataResponse 转换为 Data 类型,以便随后呈现为 ​​UIImage。

您可能会在下面看到我的 GET 请求。

AF.request(myUrl).responseData{response in
   debugPrint(reponse)
   self.delegate3?.iconServiceDelegateDidFinishWithData(result: response)
}

响应的类型为 AFDataResponse。

因此,在尝试编写时:

self.weatherIcon.image = UIImage(data: result) 

我收到一条错误消息,

无法将“AFDataResponse”(又名“DataResponse

社区的任何帮助都将不胜感激。

谢谢。

【问题讨论】:

    标签: ios networking alamofire urlsession


    【解决方案1】:

    简单回答:

    创建一个Data类型的变量并将response.data赋值给这个变量。

    AF.request(myUrl).responseData{ response in
       debugPrint(response)
       var imgData : Data                    //create variable of type data
       imgData = Data(response.data!)       // access the data through response.data
       self.delegate3?.iconServiceDelegateDidFinishWithData(result: imgData)
    }
    

    【讨论】:

      【解决方案2】:

      有很多方法可以做到这一点。您可以按照最初的建议直接访问data(尽管我会将其视为Optional,而不是强制展开,否则会崩溃)。

      .responseData { response in
          let image = response.data.map(UIImage.init(data:)) // Creates UIImage?
      }
      

      您可以转换 Result 值以维护您收到的任何 Error。

      .responseData { response in
          let image = response.result.map(UIImage.init(data:)) // Creates Result<UIImage, AFError>
      }
      

      或者你可以映射整个DataResponse。

      .responseData { response in
          let imageResponse = response.map(UIImage.init(data:)) // Creates DataResponse<UIImage, AFError>
      }
      

      【讨论】:

        猜你喜欢
        • 2021-08-23
        • 1970-01-01
        • 1970-01-01
        • 2020-01-17
        • 1970-01-01
        • 2013-04-06
        • 2019-12-02
        • 2013-03-06
        • 2014-01-13
        相关资源
        最近更新 更多