cell重用 请求数据防止重复请求,或离屏请求数据,使用SingleAssignmentDisposable防止重复订阅

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)
  }
}

  

猜你喜欢

转载自www.cnblogs.com/powerbear/p/9333613.html
今日推荐