RACSequence(ReactiveCocoa)中的'array'方法有什么作用?

时间:2014-05-29 15:55:48

标签: ios objective-c reactive-cocoa

这是Ray Wenderich iOS 7 Best Practices article的代码片段。他基本上是获取一个JSON文件并为列表中的每个创建一个模型;

return [[self fetchJSONFromURL:url] map:^id(NSDictionary *json) {
                RACSequence *list = [json[@"list"] rac_sequence];

                return [[list map:^(NSDictionary *item) {
                    return [MTLJSONAdapter modelOfClass:[WXDailyForecase class] fromJSONDictionary:item error:nil];
                }] array];
    }];

array做了什么?

1 个答案:

答案 0 :(得分:0)

RACSequence的实例方法map返回另一个RACSequence实例。因此,如果您需要NSArray个实例,则必须使用-[RACSequence array]方法评估整个序列并将其值转换为NSArray

顺便说一下,map方法是懒惰地执行的;当序列产生值时,您将逐个接收它们,直到您取消订阅或到达序列的末尾。但是,如果所有值都不可用,则调用-array方法将阻塞当前线程(直到它们全部可用,此时该方法将取消阻塞并返回该数组)。