1、好用的ReactiveCocoa这样好用的ReactiveCocoa,根本停不下来前戏我个人非常推崇ReactiveCocoa,它就像中国的太极,太极生两仪,两仪生四象,四象生八卦,八卦生万物。ReactiveCocoa是一个高度抽象的编程框架,它真的很抽象,初看你不知道它是要干嘛的,等你用上了之后,就发现,有了它你是想干嘛就干嘛,编码从未如此流畅。在此我不会讲ReactiveCocoa的原理,因为不能讲明白的才叫抽象。我也不会提及相关概念。我只是让你看看我用着它是有多爽。代码的四十八手察值你别动,你一动我就知道。1. weakify(self);2. RACObserve(self,valu
2、e)subscribeNext:(NSString*x)3. strongify(self);4. NSLog(你动了);5. ;单边你唱歌,我就跳舞。textField的内容长度隐射成BOOL值,绑定到confirmButton的enable属性上面,当textField输入内容不为空的时候,confirmButton的enable = YES。1. RACSignal*signalA=RACSignalcreateSignal:RACDisposable*(idsubscriber)2. subscribersendNext:唱歌;3. subscribersendCompleted;4.
3、 returnnil;5. ;6. RAC(self,value)=signalAmap:id(NSString*value)7. if(valueisEqualToString:唱歌)8. return跳舞;9. 10. return;11. ;双边你向西,他就向东,他向左,你就向右。 1. RACChannelTerminal*channelA=RACChannelTo(self,valueA);2. RACChannelTerminal*channelB=RACChannelTo(self,valueB);3. channelAmap:id(NSString*value)4. if(va
4、lueisEqualToString:西)5. return东;6. 7. returnvalue;8. subscribe:channelB;9. channelBmap:id(NSString*value)10. if(valueisEqualToString:左)11. return右;12. 13. returnvalue;14. subscribe:channelA;15. RACObserve(self,valueA)filter:BOOL(idvalue)16. returnvalue?YES:NO;17. subscribeNext:(NSString*x)18. NSLog(
5、你向%,x);19. ;20. RACObserve(self,valueB)filter:BOOL(idvalue)21. returnvalue?YES:NO;22. subscribeNext:(NSString*x)23. NSLog(他向%,x);24. ;25. self.valueA=西;26. self.valueB=左;1. 2015-08-1520:14:46.544Test2440:99901你向西2. 2015-08-1520:14:46.544Test2440:99901他向东3. 2015-08-1520:14:46.545Test2440:99901他向左4. 2
6、015-08-1520:14:46.545Test2440:99901你向右代理你是程序员,你帮我写个app吧。1. protocolProgrammer2. -(void)makeAnApp;3. end1. RACSignal*ProgrammerSignal=2. selfrac_signalForSelector:selector(makeAnApp)3. fromProtocol:protocol(Programmer);4. ProgrammerSignalsubscribeNext:(RACTuple*x)5. NSLog(花了一个月,app写好了);6. ;7. selfmak
7、eAnApp;1. 2015-08-1520:46:45.720Test2817:114564花了一个月,app写好了广播知道你的频道,我就能听到你了。1. NSNotificationCenterdefaultCenterrac_addObserverForName:代码之道频道object:nilsubscribeNext:(NSNotification*x)2. NSLog(技巧:%,x.userInfo技巧);3. ;4. NSNotificationCenterdefaultCenterpostNotificationName:代码之道频道object:niluserInfo:技巧:
8、用心写;1. 2015-08-1520:41:15.786Test2734:111505技巧:用心写连接生活是一个故事接一个故事。1. RACSignal*signalA=RACSignalcreateSignal:RACDisposable*(idsubscriber)2. subscribersendNext:我恋爱啦;3. subscribersendCompleted;4. returnnil;5. ;6. RACSignal*signalB=RACSignalcreateSignal:RACDisposable*(idsubscriber)7. subscribersendNext:
9、我结婚啦;8. subscribersendCompleted;9. returnnil;10. ;11. signalAconcat:signalBsubscribeNext:(idx)12. NSLog(%,x);13. ;1. 2015-08-1512:19:46.707Test1845:64122我恋爱啦2. 2015-08-1512:19:46.707Test1845:64122我结婚啦合并污水都应该流入污水处理厂被处理。1. RACSignal*signalA=RACSignalcreateSignal:RACDisposable*(idsubscriber)2. subscrib
10、ersendNext:纸厂污水;3. returnnil;4. ;5. RACSignal*signalB=RACSignalcreateSignal:RACDisposable*(idsubscriber)6. subscribersendNext:电镀厂污水;7. returnnil;8. ;9. RACSignalmerge:signalA,signalBsubscribeNext:(idx)10. NSLog(处理%,x);11. ;1. 2015-08-1512:10:05.371Test1770:60147处理纸厂污水2. 2015-08-1512:10:05.372Test177
11、0:60147处理电镀厂污水组合你是红的,我是黄的,我们就是红黄的,你是白的,我没变,我们是白黄的。1. RACSignal*signalA=RACSignalcreateSignal:RACDisposable*(idsubscriber)2. subscribersendNext:红;3. subscribersendNext:白;4. returnnil;5. ;6. RACSignal*signalB=RACSignalcreateSignal:RACDisposable*(idsubscriber)7. subscribersendNext:白;8. returnnil;9. ;10
12、. RACSignalcombineLatest:signalA,signalBsubscribeNext:(RACTuple*x)11. RACTupleUnpack(NSString*stringA,NSString*stringB)=x;12. NSLog(我们是%的,stringA,stringB);13. ;1. 2015-08-1512:14:19.837Test1808:62042我们就是红黄的2. 2015-08-1512:14:19.837Test1808:62042我们是白黄的压缩你是红的,我是黄的,我们就是红黄的,你是白的,我没变,哦,那就等我变了再说吧。1. RACSi
13、gnal*signalA=RACSignalcreateSignal:RACDisposable*(idsubscriber)2. subscribersendNext:红;3. subscribersendNext:白;4. returnnil;5. ;6. RACSignal*signalB=RACSignalcreateSignal:RACDisposable*(idsubscriber)7. subscribersendNext:白;8. returnnil;9. ;10. signalAzipWith:signalBsubscribeNext:(RACTuple*x)11. RACT
14、upleUnpack(NSString*stringA,NSString*stringB)=x;12. NSLog(我们是%的,stringA,stringB);13. ;1. 2015-08-1520:34:24.274Test2660:108483我们是红白的映射我可以点石成金。1. RACSignal*signal=RACSignalcreateSignal:RACDisposable*(idsubscriber)2. subscribersendNext:石;3. returnnil;4. map:id(NSString*value)5. if(valueisEqualToString
15、:石)6. return金;7. 8. returnvalue;9. ;10. signalsubscribeNext:(idx)11. NSLog(%,x);12. ;1. 2015-08-1620:00:12.853Test740:15871金归约糖加水变成糖水。1. RACSignal*sugarSignal=RACSignalcreateSignal:RACDisposable*(idsubscriber)2. subscribersendNext:糖;3. returnnil;4. ;5. RACSignal*waterSignal=RACSignalcreateSignal:RAC
16、Disposable*(idsubscriber)6. subscribersendNext:水;7. returnnil;8. ;9. RACSignalcombineLatest:sugarSignal,waterSignalreduce:id(NSString*sugar,NSString*water)10. returnsugarstringByAppendingString:water;11. subscribeNext:(idx)12. NSLog(%,x);13. ;1. 2015-08-1620:07:00.356Test807:19177糖水过滤未满十八岁,禁止进入。1. R
17、ACSignalcreateSignal:RACDisposable*(idsubscriber)2. subscribersendNext:(15);3. subscribersendNext:(17);4. subscribersendNext:(21);5. subscribersendNext:(14);6. subscribersendNext:(30);7. returnnil;8. filter:BOOL(NSNumber*value)9. returnvalue.integerValue=18;10. subscribeNext:(idx)11. NSLog(%,x);12.
18、;1. 2015-08-1620:11:20.071Test860:21214212. 2015-08-1620:11:20.071Test860:2121430扁平打蛋液,煎鸡蛋,上盘。1. RACSignalcreateSignal:RACDisposable*(idsubscriber)2. NSLog(打蛋液);3. subscribersendNext:蛋液;4. subscribersendCompleted;5. returnnil;6. flattenMap:RACStream*(NSString*value)7. returnRACSignalcreateSignal:RAC
19、Disposable*(idsubscriber)8. NSLog(把%倒进锅里面煎,value);9. subscribersendNext:煎蛋;10. subscribersendCompleted;11. returnnil;12. ;13. flattenMap:RACStream*(NSString*value)14. returnRACSignalcreateSignal:RACDisposable*(idsubscriber)15. NSLog(把%装到盘里,value);16. subscribersendNext:上菜;17. subscribersendCompleted
20、;18. returnnil;19. ;20. subscribeNext:(idx)21. NSLog(%,x);22. ;1. 2015-08-1620:39:34.786Test1226:34386打蛋液2. 2015-08-1620:39:34.787Test1226:34386把蛋液倒进锅里面煎3. 2015-08-1620:39:34.787Test1226:34386把煎蛋装到盘里4. 2015-08-1620:39:34.787Test1226:34386上菜秩序把大象塞进冰箱只需要三步:打开冰箱门,把大象塞进冰箱,关上冰箱门。1. RACSignalcreateSignal:
21、RACDisposable*(idsubscriber)2. NSLog(打开冰箱门);3. subscribersendCompleted;4. returnnil;5. then:RACSignal*6. returnRACSignalcreateSignal:RACDisposable*(idsubscriber)7. NSLog(把大象塞进冰箱);8. subscribersendCompleted;9. returnnil;10. ;11. then:RACSignal*12. returnRACSignalcreateSignal:RACDisposable*(idsubscrib
22、er)13. NSLog(关上冰箱门);14. subscribersendCompleted;15. returnnil;16. ;17. subscribeCompleted:18. NSLog(把大象塞进冰箱了);19. ;1. 2015-08-1620:45:27.724Test1334:37870打开冰箱门2. 2015-08-1620:45:27.725Test1334:37870把大象塞进冰箱3. 2015-08-1620:45:27.725Test1334:37870关上冰箱门4. 2015-08-1620:45:27.726Test1334:37870把大象塞进冰箱了命令我命
23、令你马上投降。1. RACCommand*aCommand=RACCommandallocinitWithSignalBlock:RACSignal*(idinput)2. returnRACSignalcreateSignal:RACDisposable*(idsubscriber)3. NSLog(我投降了);4. subscribersendCompleted;5. returnnil;6. ;7. ;8. aCommandexecute:nil;1. 2015-08-1620:54:32.492Test1450:41849我投降了延迟等等我,我还有10秒钟就到了。1. RACSigna
24、lcreateSignal:RACDisposable*(idsubscriber)2. NSLog(等等我,我还有10秒钟就到了);3. subscribersendNext:nil;4. subscribersendCompleted;5. returnnil;6. delay:10subscribeNext:(idx)7. NSLog(我到了);8. ;1. 2015-08-1621:00:57.622Test1619:45924等等我,我还有10秒钟就到了2. 2015-08-1621:01:07.624Test1619:45924我到了重放一次制作,多次观看。1. RACSignal*
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1