KevinHM / FunctionalReactiveProgrammingOniOS

Functional reactive programming introduction using ReactiveCocoa 中文译本

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

4.2 流和序列 的 样例代码有错误

liangyongxiang opened this issue · comments

在4.2一开始, 有一个这样的代码:

NSArray *array = @[ @1, @2, @3 ];
RACSequence * stream = [array rac_sequence];
[stream map:^id (id value){
    return @(pow([value integerValue], 2));
}];
NSLog(@"%@",[stream array]);

书中给出的等价代码是

NSLog(@"%@",[[[array rac_sequence] map:^id (id value){
                    return @(pow([value integerValue], 2));
                }] array]);

我运行过第一份代码, 实际打印的是1,2,3。而第二份打印的是1,4,9。

第一份改成这样才是能成功运行的:

NSArray *array = @[ @1, @2, @3 ];
RACSequence * stream = [array rac_sequence];
//这里修改了↓
RACSequence * newStream = [stream map:^id (id value){
    return @(pow([value integerValue], 2));
}];
//                 ↓
NSLog(@"%@",[newStream array]);
commented

同楼上。是demo代码写的不够完整。
调试过程中增加断点测试了一下,发现首先执行NSLog(@"%@",[newStream array]); 。 然后才会执行block中的return @(pow([value integerValue], 2));代码。而且如果不调用NSLog输出数组,则block中的代码不会执行。为什么呢???