函数式、响应式编程 - ReactiveCocoa 快速入门

函数式、响应式编程(Functional Reactive Programming)现在很火。网上的介绍也不少了。为了区别于其他教程,我这里用几个简单的例子让你马上可以投入使用。都是很常见的任务。下面操作假定你已经了解CocoaPods,现在管理库基本都用这个东西,很好用。

准备

导入ReactiveCocoa

在pod文件添加新的类库

pod "ReactiveCocoa"

安装

pod update

导入头文件

建议在pch导入,全局使用。

#import <ReactiveCocoa/ReactiveCocoa.h>

使用

UIButton单击事件

[[self.button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) { NSLog(@"按钮单击");
}];

监视UITextField内容变化

[[self.field rac_textSignal] subscribeNext:^(id x) { NSLog(@"UITextField: %@",x);
}];

监视UISwitch值变化

[[self.switchControl rac_newOnChannel] subscribeNext:^(id x) { NSLog(@"UISwitch: %@",x);
}];

通知

你不再需要再为每个通知指定一个selector,一个方法搞定。

[[[NSNotificationCenter defaultCenter] rac_addobserverForName:UIApplicationDidBecomeActiveNotification object:nil] subscribeNext:^(id x) { NSLog(@"UIApplicationDidBecomeActiveNotification");
}];

对其他对象的keyPath的值跟踪

UIView.frame

[RACObserve(self.view,frame) subscribeNext:^(id x) {
    NSLog(@"self.view.frame: %@",x);
}];

UIScrollView.contentOffset

[RACObserve(scrollView,contentOffset) subscribeNext:^(@"scrollView.contentOffset: %@",x);
}];

绑定一个

RAC(.button,enabled) =
[RACSignal combineLatest:@[.usernameField.rac_textSignal,.passwordField.rac_textSignal]
                  reduce:^(Nsstring *username,Nsstring *password) {
                      return @(username.length && password.length);
                  }];

如果你已经试过上面的几个例子,那么恭喜你,你已经入门了。

相关文章

一、前言 在组件方面react和Vue一样的,核心思想玩的就是组件...
前言: 前段时间学习完react后,刚好就接到公司一个react项目...
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技...
react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...