No Description

UserInfoViewModel.swift 2.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. //
  2. // UserInfoViewModel.swift
  3. // PaiaiDataKit
  4. //
  5. // Created by ffib on 2018/12/20.
  6. // Copyright © 2018 yb. All rights reserved.
  7. //
  8. import Foundation
  9. import RxSwift
  10. import RxCocoa
  11. fileprivate(set) var ShareUserId: String = ""
  12. public class UserInfoViewModel {
  13. public var shareUserInfo = BehaviorRelay<UserInfo>(value: UserInfo())
  14. public var isLoggedIn: Observable<Void> {
  15. return shareUserInfo.asObservable()
  16. .filter{ $0.userId != "" }
  17. .flatMapLatest { _ in
  18. return Observable.just(())
  19. }
  20. }
  21. public var notLoggedIn: Observable<Void> {
  22. return shareUserInfo.asObservable()
  23. .filter { $0.userId == "" }
  24. .flatMapLatest { _ in
  25. return Observable.just(())
  26. }
  27. }
  28. public var loginCompleted: Observable<Void> {
  29. return _loginCompleted.asObservable()
  30. }
  31. public var guestLoginBtnTapped = PublishSubject<Void>()
  32. public var wxLoginBtnTapped = PublishSubject<Void>()
  33. private var _loginCompleted = PublishSubject<Void>()
  34. private var repository: UserInfoRepository
  35. private var disposeBag = DisposeBag()
  36. public init() {
  37. self.repository = UserInfoRepository(userInfoStore: UserInfoStore(),
  38. guestRemoteAPI: GuestUserInfoRemoteAPI(),
  39. wxRemoteAPI: WXUserInfoRemoteAPI())
  40. shareUserInfo.asObservable().subscribe(onNext: { (userInfo) in
  41. ShareUserId = userInfo.userId
  42. }).disposed(by: disposeBag)
  43. guestLoginBtnTapped.subscribe {[unowned self] _ in
  44. self.guestLogin()
  45. }.disposed(by: disposeBag)
  46. wxLoginBtnTapped.subscribe {[unowned self] _ in
  47. self.wxLogin()
  48. }.disposed(by: disposeBag)
  49. load()
  50. }
  51. fileprivate func load() {
  52. shareUserInfo.accept(repository.readUserInfo())
  53. }
  54. public func guestLogin() {
  55. repository.guestLogin().subscribe(onSuccess: { (userInfo) in
  56. self.shareUserInfo.accept(userInfo)
  57. self._loginCompleted.onNext(())
  58. }) { (error) in
  59. #warning("错误处理")
  60. }.disposed(by: disposeBag)
  61. }
  62. public func wxLogin() {
  63. repository.guestLogin().subscribe(onSuccess: { (userInfo) in
  64. self.shareUserInfo.accept(userInfo)
  65. self._loginCompleted.onNext(())
  66. }) { (error) in
  67. #warning("错误处理")
  68. }.disposed(by: disposeBag)
  69. }
  70. }