首页 > 解决方案 > 如何使用 RxAlamofire 下载图像

问题描述

func showImageForUrl(url: String) -> Observable<Async<Any>> {
    let result = RxAlamofire
        .requestJSON(.get,
                     url,
                     parameters: nil)
        .flatMap { (response, json) -> Observable<Any> in
            return Observable.just(json)
        }.async()
    return result
}

网址字符串“ http://1.bp.blogspot.com/-KhiJ6WYQn8Q/T7ZXxb_KHxI/AAAAAAAABvM/_l134PCuEcA/s1600/dog+photos+3.jpg

我正在尝试这个,但最终结果是一个错误。在此处输入图像描述

标签: swiftrx-swiftrxalamofire

解决方案


我认为问题之一是您请求的格式:应该是下载数据然后requestData(...)requestJSON(...)其转换为图像。

这是一个比前面的代码简单一点的例子

func showImageForUrl(url: String) -> Observable<UIImage?> {
    return RxAlamofire
        .requestData(.get, url)
        .map({ (response,data) -> UIImage? in
            return UIImage(data: data)
        })
}

您可以按以下方式使用它

showImageForUrl(myUrl)
    .bind(to: myImageView.rx.image)
    .disposed(by: disposeBag)

您可以通过过滤掉无效响应或何时UIImage为 nil 等来更进一步。希望它有所帮助。


推荐阅读