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

2015/09/04 13:51
阅读数 28

如何使用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框架了。

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

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部