RQBaseViewModel.m 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. //
  2. // RQBaseViewModel.m
  3. // RQCommon
  4. //
  5. // Created by 张嵘 on 2018/11/13.
  6. // Copyright © 2018 张嵘. All rights reserved.
  7. // 所有自定义的视图模型的基类
  8. #import "RQBaseViewModel.h"
  9. /// MVVM View
  10. /// The base map of 'params'
  11. /// The `params` parameter in `-initWithParams:` method.
  12. /// Key-Values's key
  13. /// 传递唯一ID的key:例如:商品id 用户id...
  14. NSString *const RQViewModelIDKey = @"RQViewModelIDKey";
  15. /// 传递导航栏title的key:例如 导航栏的title...
  16. NSString *const RQViewModelTitleKey = @"RQViewModelTitleKey";
  17. /// 传递数据模型的key:例如 商品模型的传递 用户模型的传递...
  18. NSString *const RQViewModelUtilKey = @"RQViewModelUtilKey";
  19. /// 传递webView Request的key:例如 webView request...
  20. NSString *const RQViewModelRequestKey = @"RQViewModelRequestKey";
  21. /// 传递数据的key
  22. NSString *const RQViewCommonValueKey = @"RQViewCommonValueKey";
  23. @interface RQBaseViewModel ()
  24. /// 整个应用的服务层 The `services` parameter in `-initWithServices:params` method.
  25. @property (nonatomic, strong, readwrite) id<RQViewModelServices> services;
  26. /// The `params` parameter in `-initWithServices:params` method.
  27. @property (nonatomic, readwrite, copy) NSDictionary *params;
  28. /// A RACSubject object, which representing all errors occurred in view model.
  29. @property (nonatomic, readwrite, strong) RACSubject *errors;
  30. /// The `View` willDisappearSignal
  31. @property (nonatomic, readwrite, strong) RACSubject *willDisappearSignal;
  32. @end
  33. @implementation RQBaseViewModel
  34. /// when `BaseViewModel` created and call `initWithParams` method , so we can ` initialize `
  35. + (instancetype)allocWithZone:(struct _NSZone *)zone {
  36. RQBaseViewModel *viewModel = [super allocWithZone:zone];
  37. @weakify(viewModel)
  38. [[viewModel
  39. rac_signalForSelector:@selector(initWithServices:params:)]
  40. subscribeNext:^(id x) {
  41. @strongify(viewModel)
  42. [viewModel initialize];
  43. }];
  44. return viewModel;
  45. }
  46. /// create `viewModel` instance
  47. - (instancetype)initWithServices:(id<RQViewModelServices>)services params:(NSDictionary *)params {
  48. self = [super init];
  49. if (self) {
  50. /// 默认在viewDidLoad里面加载本地和服务器的数据
  51. self.shouldFetchLocalDataOnViewModelInitialize = YES;
  52. self.shouldRequestRemoteDataOnViewDidLoad = YES;
  53. /// 允许IQKeyboardMananger接管键盘弹出事件
  54. self.keyboardEnable = YES;
  55. self.shouldResignOnTouchOutside = YES;
  56. self.keyboardDistanceFromTextField = 10.0f;
  57. self.title = params[RQViewModelTitleKey];
  58. /// 赋值
  59. self.services = services;
  60. self.params = params;
  61. }
  62. return self;
  63. }
  64. - (RACSubject *)errors {
  65. if (!_errors) _errors = [RACSubject subject];
  66. return _errors;
  67. }
  68. - (RACSubject *)willDisappearSignal {
  69. if (!_willDisappearSignal) _willDisappearSignal = [RACSubject subject];
  70. return _willDisappearSignal;
  71. }
  72. /// sub class can override
  73. - (void)initialize {
  74. }
  75. @end