Skip to content

Instantly share code, notes, and snippets.

@laiso
Created April 21, 2017 16:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save laiso/8896bcdf02648a6cea5d5a49551197b5 to your computer and use it in GitHub Desktop.
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