import UIKit import RxSwift import Gifu class GifTableViewCell: UITableViewCell { @IBOutlet weak var gifImageView: UIImageView! @IBOutlet weak var activityIndicator: UIActivityIndicatorView! var disposable = SingleAssignmentDisposable() override func prepareForReuse() { super.prepareForReuse() gifImageView.prepareForReuse() gifImageView.image = nil disposable.dispose() disposable = SingleAssignmentDisposable() } func downloadAndDisplay(gif stringUrl: String) { guard let url = URL(string: stringUrl) else { return } let request = URLRequest(url: url) activityIndicator.startAnimating() let s = URLSession.shared.rx.data(request: request) .observeOn(MainScheduler.instance) .subscribe(onNext: { imageData in self.gifImageView.animate(withGIFData: imageData) self.activityIndicator.stopAnimating() }) disposable.setDisposable(s) } }