1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- //
- // RQBaseViewModel.m
- // RQCommon
- //
- // Created by 张嵘 on 2018/11/13.
- // Copyright © 2018 张嵘. All rights reserved.
- // 所有自定义的视图模型的基类
- #import "RQBaseViewModel.h"
- /// MVVM View
- /// The base map of 'params'
- /// The `params` parameter in `-initWithParams:` method.
- /// Key-Values's key
- /// 传递唯一ID的key:例如:商品id 用户id...
- NSString *const RQViewModelIDKey = @"RQViewModelIDKey";
- /// 传递导航栏title的key:例如 导航栏的title...
- NSString *const RQViewModelTitleKey = @"RQViewModelTitleKey";
- /// 传递数据模型的key:例如 商品模型的传递 用户模型的传递...
- NSString *const RQViewModelUtilKey = @"RQViewModelUtilKey";
- /// 传递webView Request的key:例如 webView request...
- NSString *const RQViewModelRequestKey = @"RQViewModelRequestKey";
- /// 传递数据的key
- NSString *const RQViewCommonValueKey = @"RQViewCommonValueKey";
- @interface RQBaseViewModel ()
- /// 整个应用的服务层 The `services` parameter in `-initWithServices:params` method.
- @property (nonatomic, strong, readwrite) id<RQViewModelServices> services;
- /// The `params` parameter in `-initWithServices:params` method.
- @property (nonatomic, readwrite, copy) NSDictionary *params;
- /// A RACSubject object, which representing all errors occurred in view model.
- @property (nonatomic, readwrite, strong) RACSubject *errors;
- /// The `View` willDisappearSignal
- @property (nonatomic, readwrite, strong) RACSubject *willDisappearSignal;
- @end
- @implementation RQBaseViewModel
- /// when `BaseViewModel` created and call `initWithParams` method , so we can ` initialize `
- + (instancetype)allocWithZone:(struct _NSZone *)zone {
- RQBaseViewModel *viewModel = [super allocWithZone:zone];
- @weakify(viewModel)
- [[viewModel
- rac_signalForSelector:@selector(initWithServices:params:)]
- subscribeNext:^(id x) {
- @strongify(viewModel)
- [viewModel initialize];
- }];
- return viewModel;
- }
- /// create `viewModel` instance
- - (instancetype)initWithServices:(id<RQViewModelServices>)services params:(NSDictionary *)params {
- self = [super init];
- if (self) {
- /// 默认在viewDidLoad里面加载本地和服务器的数据
- self.shouldFetchLocalDataOnViewModelInitialize = YES;
- self.shouldRequestRemoteDataOnViewDidLoad = YES;
- /// 允许IQKeyboardMananger接管键盘弹出事件
- self.keyboardEnable = YES;
- self.shouldResignOnTouchOutside = YES;
- self.keyboardDistanceFromTextField = 10.0f;
-
- self.title = params[RQViewModelTitleKey];
- /// 赋值
- self.services = services;
- self.params = params;
- }
- return self;
- }
- - (RACSubject *)errors {
- if (!_errors) _errors = [RACSubject subject];
- return _errors;
- }
- - (RACSubject *)willDisappearSignal {
- if (!_willDisappearSignal) _willDisappearSignal = [RACSubject subject];
- return _willDisappearSignal;
- }
- /// sub class can override
- - (void)initialize {
-
- }
- @end
|