1. Disposable
- Observable 했던 작업을 중간에 취소 시킬 수 있다.
- observable에서 subscribe를 하면 Disposable 객체가 나오는데 이를 이용해서 동작중인 쓰레드를 멈출 수 있다.
- 이 방법을 사용하면 Flag를 이용해서 쓰레드를 멈추게 하는 번거로움이 해결된다.
// MARK: - IBAction
var dispos: Disposable?
@IBAction func onLoadImage(_ sender: Any) {
imageView.image = nil
dispos = rxswiftLoadImage(from: LARGER_IMAGE_URL)
.observeOn(MainScheduler.instance)
.subscribe({ result in
switch result {
case let .next(image):
self.imageView.image = image
case let .error(err):
print(err.localizedDescription)
case .completed:
break
}
})
}
@IBAction func onCancel(_ sender: Any) {
// TODO: cancel image loading
dispos?.dispose()
}
2. DisposBag
- 여러개의 Disposable을 한꺼번에 저장하고 Dispose할 수 있다.
- 기본적으로는 DisposBag 객체를 만들고 insert를 할 수 있으나 더 간략하게 Disposable.disposed(by: DisposBag)으로 만들 수 있다.
// MARK: - IBAction
var disposeBag: DisposeBag = DisposeBag()
@IBAction func onLoadImage(_ sender: Any) {
imageView.image = nil
let dispos = rxswiftLoadImage(from: LARGER_IMAGE_URL)
.observeOn(MainScheduler.instance)
.subscribe({ result in
switch result {
case let .next(image):
self.imageView.image = image
case let .error(err):
print(err.localizedDescription)
case .completed:
break
}
})
disposeBag.insert(dispos)
}
@IBAction func onCancel(_ sender: Any) {
// TODO: cancel image loading
disposeBag = DisposeBag()
}
// MARK: - IBAction
var disposeBag: DisposeBag = DisposeBag()
@IBAction func onLoadImage(_ sender: Any) {
imageView.image = nil
rxswiftLoadImage(from: LARGER_IMAGE_URL)
.observeOn(MainScheduler.instance)
.subscribe({ result in
switch result {
case let .next(image):
self.imageView.image = image
case let .error(err):
print(err.localizedDescription)
case .completed:
break
}
}).disposed(by: disposeBag)
}
@IBAction func onCancel(_ sender: Any) {
// TODO: cancel image loading
disposeBag = DisposeBag()
}
'앱 개발자 역량 > IOS' 카테고리의 다른 글
RxSwift ] 4. 다양한 operator 확인 방법 (0) | 2019.07.16 |
---|---|
RxSwift ] 3. Operator (0) | 2019.07.13 |
RxSwift ] 1. 개요 및 Observable (0) | 2019.07.13 |
ios ]AppStore 배포하기 (0) | 2019.07.09 |
Swift ] 이미지 불러오기 (0) | 2019.06.19 |