欢迎来到天天文库
浏览记录
ID:8805256
大小:218.62 KB
页数:11页
时间:2018-04-08
《[ios]响应式编程开发-reactivecocoa》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、[iOS]响应式编程开发-ReactiveCocoa(一)以下分享自蓝鸥“肖大侠”技术原创,希望让大家能够更多的了解到在iOS开发平台上响应式编程开发-ReactiveCocoa,此文为上篇,后续还会分享下篇。什么是响应式编程 响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。 例如,在命令式编程环境中,a:=b+c表示将表达式的结果赋给a,而之后改变b或c的值不会影响a。但在响应式编程中,a的值会随着b或c的更新而更新。电子表格程序就是响应式编程的一个例子。单元格可以包
2、含字面值或类似"=B1+C1"的公式,而包含公式的单元格的值会依据其他单元格的值的变化而变化。 响应式编程最初是为了简化交互式用户界面的创建和实时系统动画的绘制而提出来的一种方法,但它本质上是一种通用的编程范式。什么是ReactiveCocoa ReactiveCocoa(RAC)是一个Objective-C语言内实现响应式编程的框架。 RAC提供了大量的能够完成发送value'sstream的API。 RAC通过使用信号量(RACSignal)来完成获取当前值和未来值的功能,而不像传统的程序开发一样需要声明大量的变量。 JoshAbernathy这样解释它:·程序接收输
3、入产生输出。输出就是对输入做了一些事的结果。输入,转换,输出,完成。·输入是应用动作的全部来源。点击、键盘事件、定时器事件、GPS时间、网络请求响应都算是输入。这些事件被传递到应用中,应用将他们以某种方式混合,产生了结果:就是输出。·输出通常会改变应用的UI。开关状态变化、列表有了新的元素都是UI变化。也有可能让磁盘上某个文件产生变化,或者产生一个API请求,这都是应用的输出。·但不像传统的输入输出设计,应用的输入输出可以产生很多次。应用打开后,不只是一个简单的输入→工作→输出就构成了一个生命周期。应用经常有大量的输入并基于这些输入产生输出。基本的使用方法 例如,我们目前想要实
4、现一个NSString对象可以一直绑定到最新的时间,即使字符串发生了变化,也不应该是再去使用时间去重新赋值了。 听起来特别像Objective-C语言内的KVO特性,但是这并不是具有压倒性优势的那个方法:1-(void)observeValueForKeyPath:(NSString *)keyPathofObject:(id)objectchange:(NSDictionary *)changecontext:(void *)context; 那么我们现在使用RAC框架来实现这个功能1***.h1234//用来标识时间变量@property (nonatomic ,stro
5、ng) NSDate *time;//用来标识文字显示区域@property (nonatomic ,strong) IBOutlet UILabel*label; 1***.m12//申请注册一个每个1秒将会在主线程执行一次的信号量RACSignal*repeatSignal=[[RACSignalinterval:1onScheduler:[RACSchedulermainThreadScheduler]]repeat];345678910111213141516171819//为信号量添加执行代码端[repeatSignalsubscribeNext:^(NSDate*t
6、ime){ self.time=time;}]; //申请注册一个时间属性的信号量RACSignal*timeSignal=[self rac_valuesForKeyPath:@"time" observer:self];//为信号量添加执行代码端[timeSignalsubscribeNext:^(NSDate*time){ NSDateFormatter *formatter=[[NSDateFormatter alloc]init]; [formattersetDateFormat:@"HH:mm:ss"]; self.label.te
7、xt=[formatterstringFromDate:time]; RELEASESAFELY(formatter);}]; 同样和Objective-C语言内的KVO特性不同的是,RACSignal信号量可以进行过滤设置。 以上边的例子的话,我们加一个功能。 •获取偶数秒的时间 那么信号量部分的代码可以写为123456789101112131415161718//申请注册一个时间属性的信号量RACSignal*timeSignal=[self ra
此文档下载收益归作者所有