NSURLConnection使用RAC

2017-06-23  本文已影响11人  csp

+(RACSignal *)requestPhotoData
{
NSURLRequest *request = [self popularURLRequest];

return [[NSURLConnection rac_sendAsynchronousRequest:request] reduceEach:^id(NSURLResponse *response, NSData *data){
    return data;
}];

}
创建一个URLConnection请求之后返回的数据信号。

+(RACSignal *)importPhotos {
return [[[[[self requestPhotoData]
deliverOn:[RACScheduler mainThreadScheduler]]
map:^id(NSData *data) {
id results = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

    return [[[results[@"photos"] rac_sequence] map:^id(NSDictionary *photoDictionary) {
        FRPPhotoModel *model = [FRPPhotoModel new];
        
        [self configurePhotoModel:model withDictionary:photoDictionary];
        [self downloadThumbnailForPhotoModel:model];
        
        return model;
    }] array];
}] publish] autoconnect];

}
deliverOn用来操作线程;
rac_sequence用来序列化,通常用在数组上;
configurePhotoModel:withDictionary用来把NSDictionary转成Model;
array是把序列化重新转成数组
publish和autoconnect是为了解决多次请求,假如一个信号中发送请求,那么每次订阅都会发送请求,publish保存订阅到数组,当调用连接autoconnect,就会调用所有的订阅者的sendNext。

上一篇下一篇

猜你喜欢

热点阅读