-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathRACCommand
More file actions
49 lines (35 loc) · 1.9 KB
/
RACCommand
File metadata and controls
49 lines (35 loc) · 1.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
介绍:
http://codeblog.shape.dk/blog/2013/12/05/reactivecocoa-essentials-understanding-and-using-raccommand/
示例工程笔记:
1、界面按钮触发viewModel的command。
self.subscribeButton.rac_command = self.viewModel.subscribeCommand;
2、viewModel初始化时用statusMessage响应comand的结果:
-- 正在发email显示@"Sending request..."
-- 发email完成显示@"Thanks"
-- 失败显示@"Error :("
- (void)mapSubscribeCommandStateToStatusMessage;
3、viewModel里command被触发时先判断email地址是否有效,有效则执行发送动作。
return [SubscribeViewModel postEmail:self.email];
4、发邮件函数内直接返回AFNetworking的RAC扩展方法rac_POST返回的信号。
return [[[manager rac_POST:kSubscribeURL parameters:body] logError] replayLazily];
动作触发过程:
1、界面按钮被点击,触发viewModel的command。
2、command实际是判断地址是否有效,然后返回rac_POST的信号直接执行。
3、由于viewModel初始化时将statusMessage与command的状态绑定,而界面Label观察了statusMessage,所以command执行状态被显示到界面。
----------------------------------------------------------------------------
- 一个更简单的例子
// 每当login按钮点击的时候,这一block就会被执行
self.loginCommand = [[RACCommand alloc] initWithSignalBlock:^(id sender) {
// 这个登录方法返回一个信号,这个信号在网络请求结束的时候会发送一个值
return [client logIn];
}];
// -executionSignals方法每当loginCommand执行完成后返回一个包含上边block中返回的信号的信号
[self.loginCommand.executionSignals subscribeNext:^(RACSignal *loginSignal) {
// 登录成功后输出
[loginSignal subscribeCompleted:^ {
NSLog(@"Logged in successfully!");
}];
}];
// 当按钮点击的时候执行loginCommand.
self.loginButton.rac_command = self.loginCommand;
/////