No Description

UserInfoViewModel.swift 2.6KB

    // // UserInfoViewModel.swift // PaiaiDataKit // // Created by FFIB on 2018/12/20. // Copyright © 2018 FFIB. All rights reserved. // import Foundation import RxSwift import RxCocoa fileprivate(set) var ShareUserId: String = "" public class UserInfoViewModel { public var shareUserInfo = BehaviorRelay<UserInfo>(value: UserInfo()) public var isLoggedIn: Observable<Void> { return shareUserInfo.asObservable() .distinctUntilChanged({ $0.userId == $1.userId }) .filter { $0.userId != "" } .flatMapLatest { _ in return Observable.just(()) } } public var notLoggedIn: Observable<Void> { return shareUserInfo.asObservable() .filter { $0.userId == "" } .flatMapLatest { _ in return Observable.just(()) } } public var loginCompleted: Observable<Void> { return _loginCompleted.asObservable() } public var guestLoginBtnTapped = PublishSubject<Void>() public var wxLoginBtnTapped = PublishSubject<Void>() private var _loginCompleted = PublishSubject<Void>() private var repository: UserInfoRepository private var disposeBag = DisposeBag() public init() { self.repository = UserInfoRepository(userInfoStore: UserInfoStore(), guestRemoteAPI: GuestUserInfoRemoteAPI(), wxRemoteAPI: WXUserInfoRemoteAPI()) shareUserInfo.asObservable() .distinctUntilChanged({ $0.userId == $1.userId }) .subscribe(onNext: { (userInfo) in ShareUserId = userInfo.userId }).disposed(by: disposeBag) guestLoginBtnTapped.subscribe {[unowned self] _ in self.guestLogin() }.disposed(by: disposeBag) wxLoginBtnTapped.subscribe {[unowned self] _ in self.wxLogin() }.disposed(by: disposeBag) load() } fileprivate func load() { shareUserInfo.accept(repository.readUserInfo()) } public func guestLogin() { repository.guestLogin().subscribe(onSuccess: { (userInfo) in self.shareUserInfo.accept(userInfo) self._loginCompleted.onNext(()) }).disposed(by: disposeBag) } public func wxLogin() { Toast.showActivity(message: "正在登陆") repository.wxLogin().subscribe(onSuccess: { (userInfo) in self.shareUserInfo.accept(userInfo) self._loginCompleted.onNext(()) Toast.hide() }).disposed(by: disposeBag) } }