如何使用RxSwift和Alamofire下载图像?

问题描述 投票:0回答:1

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

我研究了正在显示的错误图像,我想我必须缓存已加载的图像。这是标准的方法吗?

我非常精通Android,我很确定fresco / picasso库已经这样做,我认为不是在iOS中。

有人能指出我正确的方向吗?

谢谢

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)
    }
}
ios swift alamofire
1个回答
1
投票

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

你有没有尝试过:

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里面有什么内容,但是你可能必须用数据init初始化你的UIImage。

if let image = UIImage(data: response.result.value) {        
}
© www.soinside.com 2019 - 2024. All rights reserved.