Skip to content

Instantly share code, notes, and snippets.

@andrespch
Created December 16, 2018 15:03
Show Gist options
  • Save andrespch/671edea548e32780bcbb7a598671aeab to your computer and use it in GitHub Desktop.
Save andrespch/671edea548e32780bcbb7a598671aeab to your computer and use it in GitHub Desktop.
view model inputs and outputs
class SearchViewModel<T> {
    // inputs
    private let searchSubject = PublishSubject<String>()
    var searchObserver: AnyObserver<String> {
        return searchSubject.asObserver()
    }
     
    // outputs
    private let loadingSubject = PublishSubject<Bool>()
    var isLoading: Driver<Bool> {
        return loadingSubject
            .asDriver(onErrorJustReturn: false)
    }

    private let errorSubject = PublishSubject<SearchError?>()
    var error: Driver<SearchError?> {
        return errorSubject
            .asDriver(onErrorJustReturn: SearchError.unkowned)
    }

    private let contentSubject = PublishSubject<[T]>()
    var content: Driver<[T]> {
        return contentSubject
            .asDriver(onErrorJustReturn: [])
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment