好用的ReactiveCocoa.docx

上传人:b****7 文档编号:8940157 上传时间:2023-02-02 格式:DOCX 页数:15 大小:19.69KB
下载 相关 举报
好用的ReactiveCocoa.docx_第1页
第1页 / 共15页
好用的ReactiveCocoa.docx_第2页
第2页 / 共15页
好用的ReactiveCocoa.docx_第3页
第3页 / 共15页
好用的ReactiveCocoa.docx_第4页
第4页 / 共15页
好用的ReactiveCocoa.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

好用的ReactiveCocoa.docx

《好用的ReactiveCocoa.docx》由会员分享,可在线阅读,更多相关《好用的ReactiveCocoa.docx(15页珍藏版)》请在冰豆网上搜索。

好用的ReactiveCocoa.docx

好用的ReactiveCocoa

这样好用的ReactiveCocoa,根本停不下来

前戏

我个人非常推崇ReactiveCocoa,它就像中国的太极,太极生两仪,两仪生四象,四象生八卦,八卦生万物。

ReactiveCocoa是一个高度抽象的编程框架,它真的很抽象,初看你不知道它是要干嘛的,等你用上了之后,就发现,有了它你是想干嘛就干嘛,编码从未如此流畅。

在此我不会讲ReactiveCocoa的原理,因为不能讲明白的才叫抽象。

我也不会提及相关概念。

我只是让你看看我用着它是有多爽。

代码的四十八手

察值

你别动,你一动我就知道。

1.@weakify(self); 

2.[RACObserve(self, value) subscribeNext:

^(NSString* x) { 

3.    @strongify(self); 

4.    NSLog(@"你动了"); 

5.}]; 

单边

你唱歌,我就跳舞。

textField的内容长度隐射成BOOL值,绑定到confirmButton的enable属性上面,当textField输入内容不为空的时候,confirmButton的enable=YES。

1.RACSignal *signalA = [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

2.       [subscriber sendNext:

@"唱歌"]; 

3.       [subscriber sendCompleted]; 

4.       return nil; 

5.   }]; 

6.   RAC(self, value) = [signalA map:

^id(NSString* value) { 

7.       if ([value isEqualToString:

@"唱歌"]) { 

8.           return @"跳舞"; 

9.       } 

10.       return @""; 

11.   }]; 

双边

你向西,他就向东,他向左,你就向右。

1.RACChannelTerminal *channelA = RACChannelTo(self, valueA); 

2.RACChannelTerminal *channelB = RACChannelTo(self, valueB); 

3.[[channelA map:

^id(NSString *value) { 

4.    if ([value isEqualToString:

@"西"]) { 

5.          return @"东"; 

6.      } 

7.     return value; 

8.}] subscribe:

channelB]; 

9.[[channelB map:

^id(NSString *value) { 

10.   if ([value isEqualToString:

@"左"]) { 

11.      return @"右"; 

12.      } 

13.    return value; 

14.}] subscribe:

channelA]; 

15.[[RACObserve(self, valueA) filter:

^BOOL(id value) { 

16.        return value ?

 YES :

 NO; 

17.}] subscribeNext:

^(NSString* x) { 

18.     NSLog(@"你向%@", x); 

19.}]; 

20.[[RACObserve(self, valueB) filter:

^BOOL(id value) { 

21.    return value ?

 YES :

 NO; 

22.}] subscribeNext:

^(NSString* x) { 

23.    NSLog(@"他向%@", x); 

24.}]; 

25.self.valueA = @"西"; 

26.self.valueB = @"左"; 

1.2015-08-15 20:

14:

46.544 Test[2440:

99901] 你向西   

2.2015-08-15 20:

14:

46.544 Test[2440:

99901] 他向东   

3.2015-08-15 20:

14:

46.545 Test[2440:

99901] 他向左   

4.2015-08-15 20:

14:

46.545 Test[2440:

99901] 你向右   

代理

你是程序员,你帮我写个app吧。

1.@protocol Programmer  

2.- (void)makeAnApp; 

3.@end 

1.RACSignal *ProgrammerSignal =   

2.[self rac_signalForSelector:

@selector(makeAnApp) 

3.               fromProtocol:

@protocol(Programmer)]; 

4.[ProgrammerSignal subscribeNext:

^(RACTuple* x) { 

5.    NSLog(@"花了一个月,app写好了"); 

6.}]; 

7.[self makeAnApp]; 

1.2015-08-15 20:

46:

45.720 Test[2817:

114564] 花了一个月,app写好了   

广播

知道你的频道,我就能听到你了。

1.[[[NSNotificationCenter defaultCenter] rac_addObserverForName:

@"代码之道频道" object:

nil] subscribeNext:

^(NSNotification* x) { 

2.    NSLog(@"技巧:

%@", x.userInfo[@"技巧"]); 

3.}]; 

4.[[NSNotificationCenter defaultCenter] postNotificationName:

@"代码之道频道" object:

nil userInfo:

@{@"技巧":

@"用心写"}]; 

1.2015-08-15 20:

41:

15.786 Test[2734:

111505] 技巧:

用心写   

连接

生活是一个故事接一个故事。

1.RACSignal *signalA = [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

2.    [subscriber sendNext:

@"我恋爱啦"]; 

3.    [subscriber sendCompleted]; 

4.    return nil; 

5.}]; 

6.RACSignal *signalB = [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

7.    [subscriber sendNext:

@"我结婚啦"]; 

8.    [subscriber sendCompleted]; 

9.    return nil; 

10.}]; 

11.[[signalA concat:

signalB] subscribeNext:

^(id x) { 

12.    NSLog(@"%@",x); 

13.}]; 

1.2015-08-15 12:

19:

46.707 Test[1845:

64122] 我恋爱啦   

2.2015-08-15 12:

19:

46.707 Test[1845:

64122] 我结婚啦   

合并

污水都应该流入污水处理厂被处理。

1.RACSignal *signalA = [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

2.    [subscriber sendNext:

@"纸厂污水"]; 

3.    return nil; 

4.}]; 

5.RACSignal *signalB = [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

6.    [subscriber sendNext:

@"电镀厂污水"]; 

7.    return nil; 

8.}]; 

9.[[RACSignal merge:

@[signalA, signalB]] subscribeNext:

^(id x) { 

10.    NSLog(@"处理%@",x); 

11.}]; 

1.2015-08-15 12:

10:

05.371 Test[1770:

60147] 处理纸厂污水   

2.2015-08-15 12:

10:

05.372 Test[1770:

60147] 处理电镀厂污水   

组合

你是红的,我是黄的,我们就是红黄的,你是白的,我没变,我们是白黄的。

1.RACSignal *signalA = [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

2.    [subscriber sendNext:

@"红"]; 

3.    [subscriber sendNext:

@"白"]; 

4.    return nil; 

5.}]; 

6.RACSignal *signalB = [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

7.    [subscriber sendNext:

@"白"]; 

8.    return nil; 

9.}]; 

10.[[RACSignal combineLatest:

@[signalA, signalB]] subscribeNext:

^(RACTuple* x) { 

11.    RACTupleUnpack(NSString *stringA, NSString *stringB) = x; 

12.    NSLog(@"我们是%@%@的", stringA, stringB); 

13.}]; 

1.2015-08-15 12:

14:

19.837 Test[1808:

62042] 我们就是红黄的   

2.2015-08-15 12:

14:

19.837 Test[1808:

62042] 我们是白黄的  

压缩

你是红的,我是黄的,我们就是红黄的,你是白的,我没变,哦,那就等我变了再说吧。

1.RACSignal *signalA = [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

2.    [subscriber sendNext:

@"红"]; 

3.    [subscriber sendNext:

@"白"]; 

4.    return nil; 

5.}]; 

6.RACSignal *signalB = [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

7.    [subscriber sendNext:

@"白"]; 

8.    return nil; 

9.}]; 

10.[[signalA zipWith:

signalB] subscribeNext:

^(RACTuple* x) { 

11.    RACTupleUnpack(NSString *stringA, NSString *stringB) = x; 

12.    NSLog(@"我们是%@%@的", stringA, stringB); 

13.}]; 

1.2015-08-15 20:

34:

24.274 Test[2660:

108483] 我们是红白的   

映射

我可以点石成金。

1.RACSignal *signal = [[RACSignal createSignal:

^RACDisposable *(id subscriber) { 

2.    [subscriber sendNext:

@"石"]; 

3.    return nil; 

4.}] map:

^id(NSString* value) { 

5.    if ([value isEqualToString:

@"石"]) { 

6.        return @"金"; 

7.    } 

8.    return value; 

9.}]; 

10.[signal subscribeNext:

^(id x) { 

11.    NSLog(@"%@", x); 

12.}]; 

1.2015-08-16 20:

00:

12.853 Test[740:

15871] 金   

归约

糖加水变成糖水。

1.RACSignal *sugarSignal = [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

2.    [subscriber sendNext:

@"糖"]; 

3.    return nil; 

4.}]; 

5.RACSignal *waterSignal = [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

6.    [subscriber sendNext:

@"水"]; 

7.    return nil; 

8.}]; 

9.[[RACSignal combineLatest:

@[sugarSignal, waterSignal] reduce:

^id (NSString* sugar, NSString*water){ 

10.    return [sugar stringByAppendingString:

water]; 

11.}] subscribeNext:

^(id x) { 

12.    NSLog(@"%@", x); 

13.}]; 

1.2015-08-16 20:

07:

00.356 Test[807:

19177] 糖水   

过滤

未满十八岁,禁止进入。

1.[[[RACSignal createSignal:

^RACDisposable *(id subscriber) { 

2.    [subscriber sendNext:

@(15)]; 

3.    [subscriber sendNext:

@(17)]; 

4.    [subscriber sendNext:

@(21)]; 

5.    [subscriber sendNext:

@(14)]; 

6.    [subscriber sendNext:

@(30)]; 

7.    return nil; 

8.}] filter:

^BOOL(NSNumber* value) { 

9.    return value.integerValue >= 18; 

10.}] subscribeNext:

^(id x) { 

11.    NSLog(@"%@", x); 

12.}]; 

1.2015-08-16 20:

11:

20.071 Test[860:

21214] 21   

2.2015-08-16 20:

11:

20.071 Test[860:

21214] 30 

扁平

打蛋液,煎鸡蛋,上盘。

1.[[[[RACSignal createSignal:

^RACDisposable *(id subscriber) { 

2.    NSLog(@"打蛋液"); 

3.    [subscriber sendNext:

@"蛋液"]; 

4.    [subscriber sendCompleted]; 

5.    return nil; 

6.}] flattenMap:

^RACStream *(NSString* value) { 

7.    return [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

8.        NSLog(@"把%@倒进锅里面煎",value); 

9.        [subscriber sendNext:

@"煎蛋"]; 

10.        [subscriber sendCompleted]; 

11.        return nil; 

12.    }]; 

13.}] flattenMap:

^RACStream *(NSString* value) { 

14.    return [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

15.        NSLog(@"把%@装到盘里", value); 

16.        [subscriber sendNext:

@"上菜"]; 

17.        [subscriber sendCompleted]; 

18.        return nil; 

19.    }]; 

20.}] subscribeNext:

^(id x) { 

21.    NSLog(@"%@", x); 

22.}]; 

1.2015-08-16 20:

39:

34.786 Test[1226:

34386] 打蛋液   

2.2015-08-16 20:

39:

34.787 Test[1226:

34386] 把蛋液倒进锅里面煎   

3.2015-08-16 20:

39:

34.787 Test[1226:

34386] 把煎蛋装到盘里   

4.2015-08-16 20:

39:

34.787 Test[1226:

34386] 上菜  

秩序

把大象塞进冰箱只需要三步:

打开冰箱门,把大象塞进冰箱,关上冰箱门。

1.[[[[RACSignal createSignal:

^RACDisposable *(id subscriber) { 

2.    NSLog(@"打开冰箱门"); 

3.    [subscriber sendCompleted]; 

4.    return nil; 

5.}] then:

^RACSignal *{ 

6.   return [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

7.       NSLog(@"把大象塞进冰箱"); 

8.       [subscriber sendCompleted]; 

9.       return nil; 

10.   }]; 

11.}] then:

^RACSignal *{ 

12.    return [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

13.        NSLog(@"关上冰箱门"); 

14.        [subscriber sendCompleted]; 

15.        return nil; 

16.    }]; 

17.}] subscribeCompleted:

^{ 

18.    NSLog(@"把大象塞进冰箱了"); 

19.}]; 

1.2015-08-16 20:

45:

27.724 Test[1334:

37870] 打开冰箱门   

2.2015-08-16 20:

45:

27.725 Test[1334:

37870] 把大象塞进冰箱   

3.2015-08-16 20:

45:

27.725 Test[1334:

37870] 关上冰箱门   

4.2015-08-16 20:

45:

27.726 Test[1334:

37870] 把大象塞进冰箱了   

命令

我命令你马上投降。

1.RACCommand *aCommand = [[RACCommand alloc] initWithSignalBlock:

^RACSignal *(id input) { 

2.   return [RACSignal createSignal:

^RACDisposable *(id subscriber) { 

3.       NSLog(@"我投降了"); 

4.       [subscriber sendCompleted]; 

5.       return nil; 

6.   }]; 

7.}]; 

8.[aCommand execute:

nil]; 

1.2015-08-16 20:

54:

32.492 Test[1450:

41849] 我投降了 

延迟

等等我,我还有10秒钟就到了。

1.[[[RACSignal createSignal:

^RACDisposable *(id subscriber) { 

2.    NSLog(@"等等我,我还有10秒钟就到了"); 

3.    [subscriber sendNext:

nil]; 

4.    [subscriber sendCompleted]; 

5.    return nil; 

6.}] delay:

10] subscribeNext:

^(id x) { 

7.    NSLog(@"我到了"); 

8.}]; 

1.2015-08-16 21:

00:

57.622 Test[1619:

45924] 等等我,我还有10秒钟就到了   

2.2015-08-16 21:

01:

07.624 Test[1619:

45924] 我到了   

重放

一次制作,多次观看。

1.RACSignal *

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1