Skip to content

Instantly share code, notes, and snippets.

@Monntay
Last active May 5, 2020 13:40
Show Gist options
  • Select an option

  • Save Monntay/68af4727200fcddbf833024a0a625964 to your computer and use it in GitHub Desktop.

Select an option

Save Monntay/68af4727200fcddbf833024a0a625964 to your computer and use it in GitHub Desktop.
ViewModel Example with Rx
import Foundation
import RxSwift
import RxCocoa
class ViewModel {
private let imageRelay: BehaviorRelay<UIImage?> = BehaviorRelay(value: nil)
private let labelTextRelay: BehaviorRelay<String?> = BehaviorRelay(value: nil)
var buttonTapRelay = PublishRelay<Void>()
private let disposeBag = DisposeBag()
private let model: [Model]
private var position = 0
var imageDriver: Driver<UIImage?> {
return self.imageRelay.asDriver()
}
var labelDriver: Driver<String?> {
return self.labelTextRelay.asDriver()
}
init(model: [Model]) {
self.model = model
self.createSubscription()
self.imageRelay.accept(model[0].image)
self.labelTextRelay.accept(model[0].text)
}
private func createSubscription() {
self.buttonTapRelay.subscribe(onNext: { _ in
self.position = self.position + 1 >= self.model.count ? 0 : self.position + 1
self.imageRelay.accept(self.model[self.position].image)
self.labelTextRelay.accept(self.model[self.position].text)
}).disposed(by: self.disposeBag)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment