文档章节

[iOS开发]如何使用ReactiveCocoa框架

浩浩老师
 浩浩老师
发布于 2015/09/04 13:51
字数 544
阅读 17
收藏 0

如何使用ReactiveCocoa

目前大量的ios应用程序在开发的过程中,是通过用户响应来改变应用程序状态的。我们在这样处理事件时,代码往往会变得非常复杂,需要用到大量的回调和状态变量来完成回调函数的功能。

其实像 UI回调 、 网络响应 、 KVO通知 等等,会有很多的共同之处,都需要回调函数进行处理功能。

那么RACSingal统一了这些不同的API,方便他们能够组合在一起完成复杂的功能。

我们先看一下下边的代码:

@implementation ViewController
{
    MethodManager *manager;
}

- (void)awakeFromNib
{
    manager = [MethodManager sharedManager];
}
- (void)viewDidLoad {
    [super viewDidLoad];
    
    [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(loggedOut:) name:@"loggedOut" object:manager];
    
    [self.usernameTextField addTarget:self action:@selector(textDelegate) forControlEvents:UIControlEventEditingChanged];
    [self.passwordTextField addTarget:self action:@selector(textDelegate) forControlEvents:UIControlEventEditingChanged];
    [self.logInButton addTarget:self action:@selector(didClickLogin:) forControlEvents:UIControlEventTouchUpInside];
}

- (void)dealloc {
    [NSNotificationCenter.defaultCenter removeObserver:self];
}

- (void)textDelegate {
    BOOL textFieldsNonEmpty = self.usernameTextField.text.length > 0 && self.passwordTextField.text.length > 0;
    BOOL readyToLogIn = !LoginManager.sharedManager.isLoggingIn && !self.loggedIn;
    self.logInButton.enabled = textFieldsNonEmpty && readyToLogIn;
}

- (IBAction)didClickLogin:(UIButton *)sender {
    [manager logInWithUsername:self.usernameTextField.text password:self.passwordTextField.text
     success:^{
         self.loggedIn = YES;
     } failure:^(NSError *error) {
         [self presentError:error];
     }];
}

- (void)loggedOut:(NSNotification *)notification {
    self.loggedIn = NO;
}

@end

  如果是RAC代码的话,我们就可以使用如下代码:

@implementation ViewController
{
    MethodManager *manager;
}

- (void)awakeFromNib
{
    manager = [MethodManager sharedManager];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    RAC(self.signButton, enabled) = [RACSignal
                                      combineLatest:@[
                                                      self.password.rac_textSignal,
                                                      self.confirm.rac_textSignal,
                                                      RACObserve(manager, signing),
                                                      RACObserve(self, signing)
                                                      ] reduce:^(NSString *username, NSString *password, NSNumber *loggingIn, NSNumber *loggedIn) {
                                                          return @(username.length > 0 && password.length > 0 && !signing.boolValue && !signing.boolValue);
                                                      }];
    
    [[self.signButton rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(UIButton *sender) {
        
        RACSignal *signingSignal = [manager logInWithUsername:self.usernameTextField.text password:self.passwordTextField.text];
        
        [signingSignal subscribeError:^(NSError *error) {
            [self presentError:error];
        } completed:^{
            self.signing = YES;
        }];
    }];
    
    RAC(self, signing) = [[NSNotificationCenter.defaultCenter rac_addObserverForName:@"LOSignNotification" object:nil] mapReplace:@NO];
}

@end

 

导入ReactiveCocoa框架

打开 终端(Terminal) 工具。进入到自己的工程目录文件夹下:

haohao:TomRAC lewis$ vi Podfile

其中 TomRAC 是公司项目文件夹名称

创建完成 Podfile 文件后,要在该文件内输入如下内容:

platform :ios, '6.0'
source 'https://github.com/CocoaPods/Specs.git'
target 'TomRAC' do
pod 'ReactiveCocoa', '~> 2.3.1'
end

通过命令保存 Podfile 文件后,在 终端(Terminal) 输入如下命令进行下载配置 ReactiveCocoa 框架:

pod install

然后就会看到熟悉的下载提示:

Analyzing dependencies
Downloading dependencies
Installing ReactiveCocoa (2.3.1)
Generating Pods project
Integrating client project
 
[!] From now on use `TomRAC.xcworkspace`.

打开工程后就能够使用ReactiveCocoa框架了。

现有个空工程,需要跳过配置步骤想先使用的同学可以先进行下载使用。

 

本文转载自:http://www.cnblogs.com/daxiaxiaohao/p/4463679.html

浩浩老师
粉丝 1
博文 80
码字总数 0
作品 0
海淀
程序员
私信 提问
iOS开发 MVVM-ReactiveCocoa资料

相对好懂一点的: http://southpeak.github.io/blog/2014/08/02/reactivecocoazhi-nan-%5B%3F%5D-:xin-hao/ http://southpeak.github.io/blog/2014/08/02/reactivecocoazhi-nan-er-:twitters......

神补刀
2015/11/10
423
0
美团客户端响应式框架 - EasyReact

EasyReact 是一款基于响应式编程范式的客户端开发框架,开发者可以使用此框架轻松地解决客户端的异步问题。EasyReact 已在美团和大众点评客户端的部分业务中进行了实践,并且持续迭代了一年多...

匿名
2018/07/23
2.9K
0
快速高效 | iOS银行卡识别

一:简介 快捷支付涉及到方方面面,同时安全问题既是用户所关心的,也是制作者不容忽视的重要部分。 比如涉及到支付和金钱的app,商户端app等等,都需要进行实名认证,实名认证可以通过银行卡...

展菲
2018/11/02
0
0
ReactiveCocoa & MVVM 学习总结二

二. MVVM 1. 什么是MVVM From: https://github.com/ReactiveCocoa/ReactiveViewModel#model-view-viewmodel MVVM是指 Model-View-ViewModel的简称,与MVC的一个主要区别是 view 拥有view mo......

lewis-180
2015/09/23
165
0
27 个 iOS 开源库,让你的开发坐上火箭吧

本文翻译自Medium,原作者是Paweł Białecki,查看原文 你不会想错过他们,真的。 我爱开源。 并且我喜欢开发者们,把他们宝贵的私人时间用来创造神奇的东西,然后他们会和其他人分享并且不...

oschina
2016/07/20
3.8K
6

没有更多内容

加载失败,请刷新页面

加载更多

还为PDF转Word抓狂?以下神器让你在职场倍受欢迎!

身在职场的你,是否一直在琢磨:如何能让自己在公司更受欢迎?如何才能在办公室里混个好人缘?如何在同事圈里留个好印象?其实,想要让自己成为受欢迎的人,只要让自己成为大家需要的人不就行...

foxit2world
27分钟前
7
0
AndServer+Service打造Android服务器实现so文件调用

so 文件调用 随着 Android 移动安全的高速发展,不管是为了执行效率还是程序的安全性等,关键代码下沉 native 层已成为基本操作。 native 层的开发就是通指的 JNI/NDK 开发,通过 JNI 可以实...

夜幕NightTeam
29分钟前
4
0
Docker下kafka学习三部曲之二:本地环境搭建

在上一章《 Docker下kafka学习,三部曲之一:极速体验kafka》中我们快速体验了kafka的消息分发和订阅功能,但是对环境搭建的印象仅仅是执行了几个命令和脚本,本章我们通过实战来学习如何编写...

程序员欣宸
29分钟前
4
0
萌新推荐!不再为Excel转换PDF发愁,Aspose.Cells for .NET一步到位!

Aspose.Cells for .NET(点击下载)是Excel电子表格编程API,可加快电子表格管理和处理任务,支持构建具有生成,修改,转换,呈现和打印电子表格功能的跨平台应用程序。 将Excel工作簿转换为...

mnrssj
30分钟前
6
0
对于绘画小白怎么画制服?该注意什么?

怎样制作学生服装?想必绘画初学者们常常会想的问题吧,不知道怎样才能画好人物的衣服,别着急,今日就在这儿讲一些关于如何绘画学生衣服校服的教程给我们!期望能够帮到你们! 轻便西装是不...

热爱画画的我
36分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部