首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用RxSwift和Alamofire下载镜像?

如何使用RxSwift和Alamofire下载镜像?
EN

Stack Overflow用户
提问于 2016-12-08 21:05:56
回答 1查看 1.6K关注 0票数 0

我也有一些问题的图像,当我试图滚动后的图像加载。

我研究了显示的错误图像,我认为我必须缓存加载的图像。这是做这件事的标准方法吗?

我非常精通Android,我非常肯定壁画/毕加索图书馆已经做到了这一点,但我认为它不是在iOS中。

谁能给我指个方向?

谢谢

代码语言:javascript
复制
class PostTableViewCell: UITableViewCell {

    @IBOutlet weak var fileView: UIImageView!

    @IBOutlet weak var messageLabel: UILabel!

    let disposeBag = DisposeBag()

    var postViewModel: PostViewModel? {
        didSet {
            guard let pvm = postViewModel else {
                return
            }

            Alamofire.request(pvm.file).responseImage{ response in
                if let image = response.result.value {
                    self.fileView.image = image
                    self.fileView.setNeedsLayout()
                }
            }

            pvm.messageText.bindTo(messageLabel.rx.text).addDisposableTo(disposeBag)
        }
    }
}

class PostViewModel {
    private let post: Post
    let disposeBag = DisposeBag()

    var fileText: BehaviorSubject<String>
    var messageText: BehaviorSubject<String>

    var file: String {
        return post.file!
    }

    init(post: Post)
    {
        self.post = post
        fileText = BehaviorSubject<String>(value: post.file!)
        fileText.subscribe(onNext: {(file) in
            post.file = file
        }).addDisposableTo(disposeBag)

        messageText = BehaviorSubject<String>(value: post.message!)
        messageText.subscribe(onNext: {(message) in
            post.message = message
        }).addDisposableTo(disposeBag)
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-12-08 22:14:57

例如,当您使用Alamofire下载某些内容时。您正在脱离主线程(这是一个异步作业)。因此,当您获得数据时,您必须再次将其推回到主线程。

您是否尝试过:

代码语言:javascript
复制
Alamofire.request(pvm.file).responseImage{ response in
    DispatchQueue.main.async {
        if let image = response.result.value {
            self.fileView.image = image
            self.fileView.setNeedsLayout()
        }
    }
}

而且,response.result.value很可能不是UIImage,而是某种形式的数据。我不知道你的response.result.value里面是什么,但有可能你必须用数据初始化你的UIImage。

代码语言:javascript
复制
if let image = UIImage(data: response.result.value) {        
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41040255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档