阿里巴巴出品的协程库,该库主要提供了支持Swift和OC,貌似也只有这两种原始语言了,下面介绍怎么安装,pods使用对应你要使用的Swift或者OC
cocoapods for objective-c: pod 'coobjc'
cocoapods for swift: pod 'coswift'
cocoapods for cokit: pod 'cokit'
source code: All the code is in the ./coobjc directory
下面看一下
一.异步/等待
1.创建协程
创建一个协程使用 co_launch 方法
co_launch(^{
...
});
通过co_launch建立的协程是默认的运行在当前线程里面的。
2.异步等待的方法
在这个协程里面我们异步的方法等待处理,并异步的获取处理的结果
- (void)viewDidLoad {
...
co_launch(^{
// async downloadDataFromUrl
NSData *data = await(downloadDataFromUrl(url));
// async transform data to image
UIImage *image = await(imageFromData(data));
// set image to imageView
self.imageView.image = image;
});
}
上面的代码很简洁,而dispatch_async 需要两次的进入有序处理数据的。
3.错误机制
在协程中,我们所有的方法都直接返回数据,错误获取通过 co_getErroe()。例如,我们通过网络连接获取数据,如果我们的请求收到错误信息的时候,我们可以使用co_launch获取错误信息。如下
//请求错误
- (COPromise*)co_GET:(NSString*)url parameters:(NSDictionary*)parameters{
COPromise *promise = [COPromise promise];
[self GET:url parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[promise fulfill:responseObject];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[promise reject:error];
}];
return promise;
}
//直接拿到返回值
co_launch(^{
id response = await([self co_GET:feedModel.feedUrl parameters:nil]);
if(co_getError()){
//handle error message
}
...
});
网友评论