Last active
May 5, 2020 13:40
-
-
Save Monntay/68af4727200fcddbf833024a0a625964 to your computer and use it in GitHub Desktop.
ViewModel Example with Rx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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