情景一 - RACCommand + Signal 控制 button 的点击
情景解释:现在我们有一个场景,在 TextField 中需要填入符合某些要求的字符串,一个按钮才可以点击。
- 首先创建一个 Textfield 和一个 UIButton:
1 | UITextField *textField = [[UITextField alloc] init]; |
- 创建一个符合 button 的 enable 要求的 signal,例如我们要求 TextField 输入的个数大于 6,button 才能点击:
1 | RACSignal *enableSignal = [textField.rac_textSignal map:^id _Nullable(NSString * _Nullable value) { |
配置 button 的 rac_command:
1 | // button 是否 enable 是根据 enable signal 来判断的 |
此时,只要 button 点击,就会执行 command 中的操作。
获取 Command 中的操作:
button.rac_command.executionSignals
是一个执行的信号组,订阅之后参数在是一个信号,参数的参数才是我们需要用的值:
1 |
|
- 我们也可以通过
button.rac_command.executionSignals.switchToLatest
更简单的方法去获取 Subcriber 传出的值:
1 | [[button.rac_command.executionSignals.switchToLatest deliverOnMainThread] subscribeNext:^(id _Nullable x) { |
情景二 - 双向绑定实现 ColorPicker
情景解释:三个 Slider 分别管理色值的 RGB,拖动 slider 以配置颜色或者在 RGB 值的 textField 中输入数字来配置颜色。
RACChannelTerminal
通道终端,用于实现 Objects 的双向绑定。
创建双向绑定 Signal
1 | - (RACSignal *)bindSlider:(UISlider *)slider withTextField:(UITextField *)textField { |
初始化信息并调用
1 | - (void)viewDidLoad { |