其实不光ios 学习任何一门语音最快最直接的方法就是上手. 如果单单是看看文档只能是走马观花得到一个感性认识罢了.前两天之前一个公司的测试人员跟我联系说如何学习JAVA,我问他是怎么学的,他说从网上下了好多视频教程,一直在看视频教程,也买了一些书. 我问他敲了多少代码,他说很少. 其实跟他一样的人不少. 我觉得任何事情都不简单,因为看起来简单的事情自己没有实际做过的话 往往会遇到各种各样的问题. 这也是为什么在工作中制定项目进度计划的时候 我尽量给自己和团队中的人多争取时间的最主要的一个因素.
好了,自己一些啰嗦和感悟. 下面开始正式.
What is Reactive Cocoa?
RAV is an Object-C framework for Functional Reavtive Programming;
两个关键点:
1:framework 既然是framework 那就跟你用的其他framework没什么区别 无非就是加到工程中引用罢了.不做多余解释
2:Functional Reavtive Programming 实时响应式编程
虾米引用被阿里收购后现在先上的mac版本的虾米音乐就是用Reactive Cocoa开发的.用阿里人自己的话来说就是
好东西啊,以前我们用 KVO 或 Notification 来自动绑定数据,改用 ReactiveCocoa 写以后,代码结构更佳简单清晰,同时代码行数直接减少 60% 以上
来点直观的对比吧,比如我们想要实现一个需求:当变量中的字符串改变后即时做出相应的反馈 我们用KVO 需要如下这样做
// In your viewDidLoad/awakeFromNib/init [self addObserver:self forKeyPath:@"someString" options:NSKeyValueObservingOptionNew context:&someStringChangeContext]; // In dealloc [self removeObserver:self forKeyPath:@"someString" context:&someStringChangeContext]; // Elsewhere in your class - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (context == &someStringChangeContext) { if ([keyPath isEqualToString:@"someString"]) { // Do a bunch of stuff here } } }
上面一坨代码 在应用Reactive Cocoa后 只有短短一行
[RACObserve(self, someString) distinctUntilChanged] subscribeNext:^(NSString *string) {
// Do a bunch of things here, just like you would with KVO
}];
开始动手
因为我之前安装了CocoaPods,所以我这次写的ReactiveCocoaDemo 是基于CocoaPods的.如果没有安装的可以童鞋,可以直接从github上下载ReactiveCocoa
前期工作:
1.打开xcode 创建一个工程,我命名的工程名为ReactiveCocoaDemo,
2.终端到工程路径下
cd ReactiveCocoaDemo/
pod search ReactiveCocoa
3.配置依赖文件
vi Podfile
platform :ios,'5.0'
pod 'ReactiveCocoa'
wq
4.下载文件
pod install /update
5:打开“Build Phases” 选中相应的target, 添加 RAC 到 “Link Binary With Libraries”.加上libReactiveCocoa-iOS.a
如下图
6:在Header Search Paths 中添加$(BUILD_ROOT)/../IntermediateBuildFilesPath/UninstalledProducts/include"
7:在 “Other Linker Flags” 添加 -ObjC
8:在ReactiveCocoaDemo-Prefix.pch 将RAC的头文件加进去
#import "ReactiveCocoa.h"
现在要实现如下功能
两个输入框 一个提示的Lable 一个按钮,
1.当两个输入框的内容相同时 提示文字显示“成功” 按钮可以点击
2.当任意一个输入框没有输入内容时 提示文字显示“请输入” 按钮不可点击
3.当输入框非空且两个输入内容不同时 提示“请重新输入” 按钮不可点击
下面是部分实现代码:
@weakify(self); [[RACObserve(self, warningText) filter:^(NSString *newString) { self.resultLabel.text = newString; return YES; // return [newString hasPrefix:@"Success"]; }] subscribeNext:^(NSString *newString) { @strongify(self); self.bt.enabled = [newString hasPrefix:@"Success"]; }]; RAC(self,self.warningText) = [RACSignal combineLatest:@[ RACObserve(self,self.input.text),RACObserve(self, self.verifyInput.text)] reduce:^(NSString *password, NSString *passwordConfirm) { if ([passwordConfirm isEqualToString:password]) { return @"Success"; } else if([password length] == 0 || [passwordConfirm length] ==0 ) { return @"Please Input"; } else return @"Input Error"; } ];
对应关系如下图所示
学过C++ 的应该觉得这个很类似于Qt中的信号槽机制
需要说明的是因为RAC很大程度上是依赖于Block的.所以在RAC前面我们加上@weakify(my_variable) 避免循环引用,然后在每一个
RAC块中为了防止提前释放我们需要用@strongify(my_variable)来对对象进行持有.详情点击
运行效果图如下
相关推荐
xcode的cocoapods插件
这是一个cocoaPods的安装和使用开发文档。
最新的CocoaPods安装,无需镜像
CocoaPods是OS X和IOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPods本身所支持的),并且可以轻松管理其版本。
在iOS项目中使用第三方类库可以说是非常常见的事,但是要正确地配置他们有时候是非常繁琐的事情,幸运的是CocoaPods是一个很好的解决方案。
cocoapods-packager, CocoaPods插件,它允许你从podspec生成 static 库 CocoaPods打包器 允许你从podspec中生成框架或者 static 库的CocoaPods插件。这个插件适用于那些只需要通过CocoaPods发布 pod,还可以为不使用...
cocoapods的安装和使用详细说明
cocoaPods安装使用指南,包括如何安装,升级及注意事项
cocoapods安装指导
一个简单的、用cocoaPods管理SDWebImage库的、加载图片的例程
安装ruby环境(使用cocoaPods)的基本步骤
cocoapods 更新失败 bad response Not Found 404 (http://ruby.taobao.org/specs.4.8.gz)
CocoaPods
让自己的库支持cocoaPods
IOS CocoaPods的安装与使用教程
每次安装Cocoapods总是会出现一些问题,最近比较闲就整理了一下安装文档,包括一些我遇到的问题和解决方案,有参考网上的一些资源,在此发表记录,也希望能帮到需要的人。
Spec 是一个用于创建公共 CocoaPods 规范的库。
Xcode-项目-模板Xcode 项目模板,带有 CocoaPods 和 .gitignore,基于 SingleView 和 CoreData 应用程序,使用 AFNetworking、ReactiveCocoa 和 MVVM。 ##Installation 下载,解压,将Custom Templates文件夹复制到...
kotlin-native-cocoapods A Gradle plugin which handles creating a podspec for a local Kotlin/Native project. The generated podspec properly integrates your project with cocoapods, and release/debug fat...
公司的渣渣网络,让我安装cocoapos安装了8个小时,这还是百兆光千下的时间,因为使用镜像的原因,真的很慢很慢,所以把下载好的repos文件共享给大家,因为大小超过了440M,文件有1.1G了,所以下载的文件内是一个百度网盘的...