说说ReactiveCocoa 2

- [RACObserve(self, username) subscribeNext: ^(NSString *newName){
- NSLog(@"newName:%@", newName);
- }];
- RAC(self.logInButton, enabled) = [RACSignal
- combineLatest:@[
- 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);
- }];
- RACSignal *signal = [RACSignal createSignal:^ RACDisposable * (id<RACSubscriber> subscriber) {
- NSLog(@"triggered");
- [subscriber sendNext:@"foobar"];
- [subscriber sendCompleted];
- return nil;
- }];
- [signal subscribeCompleted:^{
- NSLog(@"subscription %u", subscriptions);
- }];
- UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:@"Alert" delegate:nil cancelButtonTitle:@"YES" otherButtonTitles:@"NO", nil];
- [[alertView rac_buttonClickedSignal] subscribeNext:^(NSNumber *indexNumber) {
- if ([indexNumber intValue] == 1) {
- NSLog(@"you touched NO");
- } else {
- NSLog(@"you touched YES");
- }
- }];
- [alertView show];
- [[[self.cancelButton
- rac_signalForControlEvents:UIControlEventTouchUpInside]
- takeUntil:self.rac_prepareForReuseSignal]
- subscribeNext:^(UIButton *x) {
- // do other things
- }];
- voteButton.rac_command = [[RACCommand alloc] initWithEnabled:self.viewModel.voteCommand.enabled signalBlock:^RACSignal *(id input) {
- // Assume that we're logged in at first. We'll replace this signal later if not.
- RACSignal *authSignal = [RACSignal empty];
- if ([[PXRequest apiHelper] authMode] == PXAPIHelperModeNoAuth) {
- // Not logged in. Replace signal.
- authSignal = [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
- @strongify(self);
- FRPLoginViewController *viewController = [[FRPLoginViewController alloc] initWithNibName:@"FRPLoginViewController" bundle:nil];
- UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
- [self presentViewController:navigationController animated:YES completion:^{
- [subscriber sendCompleted];
- }];
- return nil;
- }]];
- }
- return [authSignal then:^RACSignal *{
- @strongify(self);
- return [[self.viewModel.voteCommand execute:nil] ignoreValues];
- }];
- }];
- [voteButton.rac_command.errors subscribeNext:^(id x) {
- [x subscribeNext:^(NSError *error) {
- [SVProgressHUD showErrorWithStatus:[error localizedDescription]];
- }];
- }];
- [[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"MyNotification" object:nil] subscribeNext:^(NSNotification *notification) {
- NSLog(@"Notification Received");
- }];
- NSArray *array = @[@"foo"];
- [[array rac_willDeallocSignal] subscribeCompleted:^{
- NSLog(@"oops, i will be gone");
- }];
- array = nil;
- - (void)test
- {
- RACSignal *signalA = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
- double delayInSeconds = 2.0;
- dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
- dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
- [subscriber sendNext:@"A"];
- });
- return nil;
- }];
- RACSignal *signalB = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
- [subscriber sendNext:@"B"];
- [subscriber sendNext:@"Another B"];
- [subscriber sendCompleted];
- return nil;
- }];
- [self rac_liftSelector:@selector(doA:withB:) withSignals:signalA, signalB, nil];
- }
- - (void)doA:(NSString *)A withB:(NSString *)B
- {
- NSLog(@"A:%@ and B:%@", A, B);
- }

RAC的作者之一 jspahrsummers 的一个项目
Essentilas: Understanding and Using RACCommand 介绍了RACCommand的使用,同时也涉及了RAC相关的一些点。
OAuth Token Refresh Using ReactiveCocoa 这篇文章讲了如何使用RAC来透明地获取Access Token,然后继续发送请求。
说说ReactiveCocoa 2的更多相关文章
- iOS开发之ReactiveCocoa下的MVVM(干货分享)
最近工作比较忙,但还是出来更新博客了,今天给大家分享一些ReactiveCocoa以及MVVM的一些东西,干活还是比较足的.在之前发表过一篇博文,名字叫做<iOS开发之浅谈MVVM的架构设计与团 ...
- ReactiveCocoa 冷热订阅(cold subscribe, hot subscribe)
ReactiveCocoa支持两种订阅方式,一种是冷订阅,一种是热订阅. 热订阅的特点: 1.不管有没有消息订阅着,发送者总会把消息发出去. 2.不管订阅者是什么时候订阅的,发送者总是会把相同的消息发 ...
- 为什么ReactiveCocoa中推荐使用RACSignal来做信号处理而不是RACSubject
原文解释在这里http://cocoadocs.org/docsets/ReactiveCocoa/0.6.0/ 在标题Creating hot subscribables 底下 先贴原文: The ...
- 最快让你上手ReactiveCocoa之基础篇
前言 很多blog都说ReactiveCocoa好用,然后各种秀自己如何灵活运用ReactiveCocoa,但是感觉真正缺少的是一篇如何学习ReactiveCocoa的文章,这里介绍一下. 1.Rea ...
- [iOS]ReactiveCocoa安装方法
1. 替换Ruby镜像 我们想要使用CocoaPods来安装ReactiveCocoa.由于OS X上的Ruby镜像被墙了,感谢淘宝为我们提供了国内访问镜像. $ gem sources --remo ...
- ReactiveCocoa源码拆分解析(七)
(整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载) 在这篇博客中,我将把ReactiveCocoa中的擦 ...
- ReactiveCocoa源码拆分解析(六)
(整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载) RAC为了实现优雅的信号绑定,可谓使尽浑身解数,不仅 ...
- ReactiveCocoa源码拆分解析(五)
(整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载) 好多天没写东西了,今天继续.主要讲解RAC如何于UI ...
- ReactiveCocoa源码拆分解析(四)
(整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载) 上一章节简要的说明了如何实现的热信号.但是像那么写, ...
- ReactiveCocoa源码拆分解析(三)
(整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载) 这一章节主要讨论信号的“冷”与“热” 在RAC的世界 ...
随机推荐
- leetcood学习笔记-7
Python join()方法 join()方法语法: str.join(sequence) 参数 sequence -- 要连接的元素序列. 返回值 返回通过指定字符连接序列中元素后生成的新字符串. ...
- 【转】SpringMVC整合websocket实现消息推送及触发
1.创建websocket握手协议的后台 (1)HandShake的实现类 /** *Project Name: price *File Name: HandShake.java *Packag ...
- stl+数论——1247D
其实也不算很难想,每个元素质因子分解后的p^c的p和c用pair的形式存在每个元素vector里 要去前面找一个数使得所有指数相加是k的倍数,那么把vector里的所有c 模 k,然后去找前面互补的数 ...
- (转)OpenFire源码学习之十一:连接管理(下)
转:http://blog.csdn.net/huwenfeng_2011/article/details/43416523 下面是下部分 C2S 1.当有客户端进行连接时根据Mina框架的模式首先调 ...
- 2017年上半年,一线城市豪宅TOP50成交均价排名
辣眼睛!最新豪宅排行榜来了!释放重磅信号 东方财富网 2017-07-27 08:47 阅读:152 摘要:在中国,在买房这个问题上,不少工薪族都感到亚历山大.但是,在富豪眼里,犯难的是投资哪个房地产 ...
- Vi/Vim查找,替换,统计使用方法
Vi/Vim查找替换使用方法 vi/vim 中可以使用 :s 命令来替换字符串.该命令有很多种不同细节使用方法,可以实现复杂的功能,记录几种在此,方便以后查询. 可以使用 # 作为分隔符,此时中间出现 ...
- 【mac】配置sublime开发C
1.sublime text3,Tools/Build System/New Build system创建一个新配置文件. {"cmd": ["gcc", &q ...
- Tomcat运行错误示例
tomcat运行错误示例 当出现这种错误时,如果是自己配置的tomcat,需要找/conf/server.xml文件. 如果是使用的eclipse tomcat 插件,需要在你的工作空间 找到 如下文 ...
- 在Windows上安装部署Cuckoo
1. Cuckoo使用的第三方工具及库 Yara:http://plusvic.github.io/yara/ Pydeep:https://github.com/kbandla/pydeep Yar ...
- shell脚本批量监控主机磁盘信息
写一个配置文件保存被监控主机SSH连接信息,格式:IP User Port [root@Test ~]# cat host 10.10.10.10 root 22 10.10.10.11 root 2 ...