스크롤을 빠르게 내렸다가 올리면 cell 위치에 잘못된 이미지가 들어가는 문제
override func prepareForReuse() {
super.prepareForReuse()
self.imageView.image = nil
self.disposeBag = DisposeBag()
self.currentIndexPath = nil
self.viewModel.pokemonImageSubject.onNext(nil)
}
셀에서 구독하고 있는 subject가 초기값을 가지고 구독을 시작하면 가장 최근에 방출되었던 값을 받으며 구독을 시작하는 객체이기 때문
let pokemonImageSubject = BehaviorSubject<UIImage?>(value: nil)
PublishRelay로 바꾸는 것이 좋아 보인다. 바꿔보자
final class MainViewCellModel {
private let disposeBag = DisposeBag()
let pokemonImageRelay = PublishRelay<UIImage?>()
func fetchPokemonImage(for id: Int) {
NetworkManager.shared.fetchPokemonImage(for: id)
.subscribe(onSuccess: { [weak self] image in
self?.pokemonImageRelay.accept(image) // 값 방출
}, onFailure: { [weak self] error in
self?.pokemonImageRelay.accept(nil) // 실패 시 nil 방출 (필요에 따라)
})
.disposed(by: disposeBag)
}
}
아래 리팩토링을 통해 문제 해결