Skip to content

Commit 1114f62

Browse files
committed
Add new content
1 parent deb077b commit 1114f62

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,59 @@
11
# 网络层回访
2+
3+
还有一个机会来进一步接受我们函数反应型编程的理念,那就是我们的网络层 `FRPPhotoImporter`,我们先来看看下载图片的方法:
4+
5+
```
6+
+ (void)downloadThumbnailForPhotoModel:(FRPPhotoModel *)photoModel {
7+
[self download:photoModel.thumbnailURL withCompletion:^(NSData *data) {
8+
photoModel.thumbnailData = data;
9+
}];
10+
}
11+
12+
+ (void)downloadFullsizedImageForPhotoModel:(FRPPhotoModel *)photoModel {
13+
[self download:photoModel.fullsizedURL withCompletion:^(NSData *data){
14+
photoModel.fullsizedData = data;
15+
}];
16+
}
17+
18+
+ (void)download:(NSString *)urlString withCompletion:(void (^)(NSData *data))completion {
19+
NSAssert(urlString, @"URL must not be nil");
20+
21+
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
22+
[NSURLConnection sendAsynchronousRequest:request
23+
queue:[NSOperationQueue mainQueue]
24+
completionHandler:
25+
^(NSURLResponse *response, NSData *data, NSError *connectionError) {
26+
if(completion) {
27+
completion(data);
28+
}
29+
}];
30+
}
31+
32+
```
33+
Completion blocks?这是另外一个使用Signals的机会。更深入一点来说,我们可以使用`NSURLConnection`的ReactiveCocoa的扩展。下面我们来重写上面的方法:
34+
35+
```
36+
+ (void)downloadThumbnailForPhotoModel:(FRPPhotoModel *)photoModel {
37+
RAC(photoModel, thumbnailData) = [self download:photoModel.thumbnailURL];
38+
}
39+
40+
+ (void)downloadFullsizedImageForPhotoModel:(FRPPhotoModel *)photoModel {
41+
RAC(photoModel,fullsizedData) = [self download:photoModel.fullsizedURL];
42+
}
43+
44+
+ (RACSignal *)download:(NSString *)urlString {
45+
NSAssert(urlString , @"URL must not be nil");
46+
47+
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString: urlString]];
48+
49+
return [[[NSURLConnection rac_sendAsynchronousRequest:request]
50+
map:^id (RACTuple *value) {
51+
return [value second];
52+
}] deliverOn:[RACScheduler mainThreadScheduler]];
53+
}
54+
55+
```
56+
这里有两个大的不同:
57+
58+
1. asdf
59+
2. asdf

0 commit comments

Comments
 (0)