Skip to content

Instantly share code, notes, and snippets.

@laiso
Created April 21, 2017 16:32
Show Gist options
  • Select an option

  • Save laiso/8896bcdf02648a6cea5d5a49551197b5 to your computer and use it in GitHub Desktop.

Select an option

Save laiso/8896bcdf02648a6cea5d5a49551197b5 to your computer and use it in GitHub Desktop.
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
private var viewModel: ViewModel!
private let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
viewModel = ViewModel(buttonTap: self.button.rx.tap.asObservable())
viewModel.item.asDriver(onErrorJustReturn: -1)
.drive(onNext: { _ in
print(1)
})
.disposed(by: disposeBag)
viewModel.errorMessage.observeOn(MainScheduler.instance)
.subscribe(onNext: { e in
print("[ERROR]", e)
})
.disposed(by: disposeBag)
}
}
struct ViewModel {
let item: Observable<Int>
let errorMessage: Observable<String>
init(buttonTap: Observable<Void>, api: ItemAPI = ItemAPI(session: URLSession.shared)) {
let errorSubject = PublishSubject<String>()
errorMessage = errorSubject.asObservable()
item = buttonTap
.flatMapLatest { api.getItems() }
.retryWhen {
$0.map { error in
errorSubject.onNext(error.localizedDescription)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment