说明:不深入不复杂不看源码不分析内部构造
view&&Controller <--> viewMidel<-->model
1.view(loginView)只存放UI布局和暴露外部调用条件
闭门造车,出门合辙
纯代码
.h 把对象开放暴露出去
@property(nonatomic,strong)UIButton *login_Btn;
@property(nonatomic,strong)UITextField *textField_acc;
@property(nonatomic,strong)UITextField *textField_pwd;
.m 布局
2.Controller 转场控制,ARC数据绑定,及ARC消息发送、回调
发号施令 兼收并用
直接贴代码:
// 绑定参数 把view (loginView)里面的账号密码绑定到viewModel
RAC(self.viewModel,user_pwd) = self.loginView.textField_pwd.rac_textSignal;
RAC(self.viewModel,user_name) = self.loginView.textField_acc.rac_textSignal;
//arc 按钮点击事件
@weakify(self);
[[self.login_Btn rac_signalForControlEvents:(UIControlEventTouchUpInside)]
subscribeNext:^(id x) {
@strongify(self)
//第一步:创建信号发送 第二步处理在viewModel里
RACSignal *signal = [self.viewModel.command_login execute:nil];
//消息回调
[signal subscribeNext:^(id x) {
// 第三步:处理完了我来告诉你结果 啊...啊...啊...123完事了
}];
}];
3.viewModel 逻辑处理、数据整理、提供方法
可攻可受 可攻可受 可攻可受~
.h文件 外部接口
@property(nonatomic,strong)RACCommand *command_login;
@property(nonatomic,copy)NSString *user_pwd;
@property(nonatomic,copy)NSString *user_name;
.m 接受信息 订阅执行 第二步处理:
-(RACCommand *)command_login{
@weakify(self);
_command_login = [[RACCommand alloc]initWithSignalBlock:^RACSignal *(id input) {
// 创建信号
@strongify(self);
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
//绑定的参数可以用了 请求数据处理登录 --网络请求(二次封装一下)AFNetworling...
NSLog(@"%@",self.user_pwd,self.user_name);
[subscriber sendNext:@"success"];//发送回调
return nil;
}];
.
return signal;
}];
return _command_login;
}
4.model 数据模型
MJExtension
结束