如何建立基于CocoaPods的ReactiveCocoa工程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何建立基于CocoaPods的ReactiveCocoa工程相关的知识,希望对你有一定的参考价值。

  ReactiveCocoa 和 CocoaPods 一样也是目前很流行的 能方便和提高效率的框架.
  其实不光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";
  
  ];
参考技术A 两个关键点:
1:framework 既然是framework 那就跟你用的其他framework没什么区别 无非就是加到工程中引用罢了.不做多余解释
2:Functional Reavtive Programming 实时响应式编程

以上是关于如何建立基于CocoaPods的ReactiveCocoa工程的主要内容,如果未能解决你的问题,请参考以下文章

使用CocoaPods建立私有仓库

项目管理:CocoaPods建立私有仓库

iOS组件化实践(基于CocoaPods)

基于 Swift 创建 CocoaPods 完全指南

基于CocoaPods的 React Native新手入门

如何在swift中使用cocoapods导入的第三方oc库