仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3280|回复: 19
打印 上一主题 下一主题

[学习教程] IOS设计ReactiveCocoa - iOS开辟的新框架仓酷云

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:34:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
视图是仪表盘模型是发动机控制器是控制芯片CoreData---管理数据OBJC刚学的时候觉得CD很高深其实他是最容易用的库之一



甚么是ReactiveCocoa

ReactiveCocoa(其简称为RAC)是由Github开源的一个使用于iOS和OSX开辟的新框架。RAC具有函数式编程和呼应式编程的特征。它次要吸收了.Net的ReactiveExtensions的计划和完成。
ReactiveCocoa试图办理甚么成绩

经由一段工夫的研讨,我以为ReactiveCocoa试图办理以下3个成绩:

  • 传统iOS开辟过程当中,形态和形态之间依附过量的成绩
  • 传统MVC架构的成绩:Controller对照庞大,可测试性差
  • 供应一致的动静传送机制
传统iOS开辟过程当中,形态和形态之间依附过量的成绩

我们在开辟iOS使用时,一个界面元素的形态极可能受多个别的界面元素或背景形态的影响。
比方,在用户帐户的登录界面,一般会有2个输出框(分离输出帐号和暗码)和一个登录按钮。假如我们要到场一个限定前提:当用户输出完帐号和暗码,而且登录的收集哀求还未收回时,断定按钮才能够点击。一般情形下,我们必要监听这两个输出框的形态变更和登录的收集哀求形态,然后修正另外一个控件的enabled形态。
传统的写法以下(该示例代码修正自ReactiveCocoa官网):
  1. 12345678910111213141516171819202122232425262728293031
复制代码
  1. staticvoid*ObservationContext=&ObservationContext;-(void)viewDidLoad{[superviewDidLoad];[LoginManager.sharedManageraddObserver:selfforKeyPath:@"loggingIn"options:NSKeyValueObservingOptionInitialcontext:&ObservationContext];[self.usernameTextFieldaddTarget:selfaction:@selector(updateLogInButton)forControlEvents:UIControlEventEditingChanged];[self.passwordTextFieldaddTarget:selfaction:@selector(updateLogInButton)forControlEvents:UIControlEventEditingChanged];}-(void)updateLogInButton{BOOLtextFieldsNonEmpty=self.usernameTextField.text.length>0&&self.passwordTextField.text.length>0;BOOLreadyToLogIn=!LoginManager.sharedManager.isLoggingIn&&!self.loggedIn;self.logInButton.enabled=textFieldsNonEmpty&&readyToLogIn;}-(void)observeValueForKeyPath:(NSString*)keyPathofObject:(id)objectchange:(NSDictionary*)changecontext:(void*)context{if(context==ObservationContext){[selfupdateLogInButton];}else{[superobserveValueForKeyPath:keyPathofObject:objectchange:changecontext:context];}}
复制代码
RAC经由过程引进旌旗灯号(Signal)的观点,来取代传统iOS开辟中关于控件形态变更反省的代办署理(delegate)形式或target-action形式。由于RAC的旌旗灯号是能够组合(combine)的,以是能够轻松地机关出另外一个新的旌旗灯号出来,然后将按钮的enabled形态与新的旌旗灯号绑定。以下所示:
  1. 123456789
复制代码
  1. RAC(self.logInButton,enabled)=[RACSignalcombineLatest:@[self.usernameTextField.rac_textSignal,self.passwordTextField.rac_textSignal,RACObserve(LoginManager.sharedManager,loggingIn),RACObserve(self,loggedIn)]reduce:^(NSString*username,NSString*password,NSNumber*loggingIn,NSNumber*loggedIn){return@(username.length>0&&password.length>0&&!loggingIn.boolValue&&!loggedIn.boolValue);}];
复制代码
能够看到,在引进RAC以后,之前散落在action-target或KVO的回调函数中的判别逻辑被一致到了一同,从而使得登录按钮的enabled形态被加倍明晰地表达了出来。
除组合(combine)以外,RAC的旌旗灯号还撑持链式(chaining)和过滤(filter),以便利将旌旗灯号举行进一步处置。
试图办理MVC框架的成绩

关于传统的Model-View-Controller的框架,Controller很简单变得对照复杂和庞大。因为Controller承当了Model和View之间的桥梁感化,以是Controller经常与对应的View和Model的耦合度十分高,这同时也形成对其做单位测试十分不简单,对iOS工程的单位测试年夜多都只在一些工具类或与界面有关的逻辑类中举行。
RAC的旌旗灯号机制很简单将某一个Model变量的变更与界面联系关系,以是十分简单使用Model-View-ViewModel框架。经由过程引进ViewModel层,然后用RAC将ViewModel与View联系关系,View层的变更能够间接呼应ViewModel层的变更,这使得Controller变得加倍复杂,因为View不再与Model绑定,也增添了View的可重用性。
由于引进了ViewModel层,以是单位测试能够在ViewModel层举行,iOS工程的可测试性也年夜年夜加强了。InfoQ也曾撰文先容过MVVM:《MVVM启发录》。
一致动静传送机制

iOS开辟中有着各类动静传送机制,包含KVO、Notification、delegation、block和target-action体例。各类动静传送机制使得开辟者在做详细选择时感应狐疑,比方在objc.io上就有专门撰文(破船的翻译),先容各类动静传送机制之间的差别性。
RAC将传统的UI控件事务举行了封装,使得以上各类动静传送机制都能够用RAC来完成。示例代码以下:
  1. 123456789101112131415161718192021222324
复制代码
  1. //KVO[RACObserve(self,username)subscribeNext:^(idx){NSLog(@"成员变量username被修正成了:%@",x);}];//target-actionself.button.rac_command=[[RACCommandalloc]initWithSignalBlock:^RACSignal*(idinput){NSLog(@"按钮被点击");return[RACSignalempty];}];//Notification[[[NSNotificationCenterdefaultCenter]rac_addObserverForName:UIKeyboardDidChangeFrameNotificationobject:nil]subscribeNext:^(idx){NSLog(@"键盘Frame改动");}];//Delegate[[selfrac_signalForSelector:@selector(viewWillAppear:)]subscribeNext:^(idx){debugLog(@"viewWillAppear办法被挪用%@",x);}];
复制代码
RAC的RACSignal类也供应了createSignal办法来让用户创立自界说的旌旗灯号,以下代码创立了一个下载指定网站内容的旌旗灯号。
  1. 12345678910111213141516171819
复制代码
  1. -(RACSignal*)urlResults{return[RACSignalcreateSignal:^RACDisposable*(id<RACSubscriber>subscriber){NSError*error;NSString*result=[NSStringstringWithContentsOfURL:[NSURLURLWithString:@"http://www.devtang.com"]encoding:NSUTF8StringEncodingerror:&error];NSLog(@"download");if(!result){[subscribersendError:error];}else{[subscribersendNext:result];[subscribersendCompleted];}return[RACDisposabledisposableWithBlock:^{NSLog(@"cleanup");}];}];}
复制代码
怎样利用ReactiveCocoa

ReactiveCocoa能够在iOS和OSX的使用开辟中利用,关于iOS开辟者,能够将RAC源码下载编译后,利用编译好的libReactiveCocoa-iOS.a文件。
开辟者也能够用CocoaPods来设置方针工程对ReactiveCocoa的依附,只必要编纂Podfile文件,增添以下内容便可:

管理所有设备发生的事件比如屏幕旋转屏幕关闭或者一些其他的程序的控制逻辑也应该写在这里他的初始化函数是-(id)initWithNibName:(NSString*)nibNamebundle:(NSBundle*)nibBundle后面那个NibName是InterfaceBuilder里设计的界面现在IB已经集成到XCode里了
变相怪杰 该用户已被删除
沙发
发表于 2015-1-21 10:31:16 | 只看该作者
最后在做项目的时候一定要认真对待,毕竟这个直接和你的就业挂钩,这也是锻炼你实际操作的能力。
再见西城 该用户已被删除
板凳
发表于 2015-1-24 15:18:05 | 只看该作者
有办法利用自己手头的电脑立刻开始这个美妙旅程的。
admin 该用户已被删除
地板
发表于 2015-1-28 16:52:14 | 只看该作者
培训时可以选择安卓,iOS,Java,因为实习的时候我选了安卓,当时实习时间只有三周,学的晕头转向,而java我也没学过,iOS的基础是C语言,这个大学里还是学过的,于是选择了iOS。
5#
发表于 2015-2-5 15:03:45 | 只看该作者
每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。
飘飘悠悠 该用户已被删除
6#
发表于 2015-2-12 09:07:30 | 只看该作者
其实在培训的过程中,学习到最多的就是查资料的方式,当时感觉老师好坑,什么都不告诉我们,让我们自己去查,但是现在觉得还是要自己解决问题,这样才能理解的更加深入。
莫相离 该用户已被删除
7#
发表于 2015-2-12 09:07:30 | 只看该作者
到大三时,学院与我去培训的机构成立了实习基地,并让我们寒假去实习了一段时间,感觉还不错,于是在大四的时候去培训了
爱飞 该用户已被删除
8#
发表于 2015-2-14 09:47:56 | 只看该作者
要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。
愤怒的大鸟 该用户已被删除
9#
发表于 2015-3-2 07:57:41 | 只看该作者
众多研发人员积极参与到iOS平台的开发中来也就不足为奇了。
冷月葬花魂 该用户已被删除
10#
发表于 2015-3-9 08:38:28 | 只看该作者
同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。
分手快乐 该用户已被删除
11#
发表于 2015-3-16 21:06:14 | 只看该作者
我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。
小妖女 该用户已被删除
12#
发表于 2015-3-17 03:46:07 | 只看该作者
down下code4app网站的每个分类的代码挨着看
精灵巫婆 该用户已被删除
13#
发表于 2015-3-23 17:39:20 | 只看该作者
我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。
小女巫 该用户已被删除
14#
发表于 2015-3-25 13:04:48 | 只看该作者
众多研发人员积极参与到iOS平台的开发中来也就不足为奇了。
飘灵儿 该用户已被删除
15#
发表于 2015-3-30 11:46:58 | 只看该作者
这个办法就是在WindowsXP或Win7的电脑上,使用vmware虚拟机来搭建一个真实的Mac OS X环境。
金色的骷髅 该用户已被删除
16#
发表于 2015-4-10 18:20:07 | 只看该作者
因为我们老师也是自学的,给我们讲课说的最多的就是百度,谷歌,查文档。
活着的死人 该用户已被删除
17#
发表于 2015-4-15 19:51:02 | 只看该作者
我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。
乐观 该用户已被删除
18#
发表于 2015-4-21 22:14:06 | 只看该作者
边吃零食边看Stanford的视频教程
老尸 该用户已被删除
19#
发表于 2015-6-19 08:00:25 | 只看该作者
有办法利用自己手头的电脑立刻开始这个美妙旅程的。
谁可相欹 该用户已被删除
20#
发表于 2015-7-3 04:33:44 | 只看该作者
首先是基础,在汉昌的课程非常全面。从object—c到最后的毕业项目,基本上方方面面都涉及到了,我是一名非计算机专业的学生,起初学习还有点吃力,因为基础知识薄弱。经常像听天书
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-28 17:51

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表