在方便的方法中包装基于块的API [英] Wrapping blocks based API in convenience methods
本文介绍了在方便的方法中包装基于块的API的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用AFNetworking 2.0来访问Web api(尽管这也适用于NSURLSession),目前我有一堆看起来像这样的代码:
I'm using AFNetworking 2.0 to access a web api (although this would apply to NSURLSession as well), and currently I have a bunch of code that looks like this:
[self.rottenTomatoesManager GET:@"movies.json" parameters:@{@"q" : searchString, @"apikey" : [self.rottenTomatoesManager apiKey]}
success:^(NSURLSessionDataTask *task, id responseObject) {
NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response;
if(response.statusCode == 200){
NSDictionary *responseData = responseObject;
self.searchResults = responseData[@"movies"];
[self.searchDisplayController.searchResultsTableView reloadData];
[self.tableView reloadData];
}
}
failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"Error loading movies %@", error.localizedDescription);
}];
我想采用该功能并将其包装在看起来像这样的便捷方法中
I'd like to take that functionality and wrap it in a convenience method that looks something like this
NSArray *results = [self.rottenTomatoesManager searchMoviesWithTitle:@"The avengers"]
清理ViewController代码并使大多数代码框架不可知.
to clean up the ViewController code and to make most of the code framework agnostic.
执行此操作的最佳方法是什么,以免将基于异步块的API转换为同步API?
What is the best way to do this so that I'm not turning a nice asynchronous blocks based API into a synchronous API?
推荐答案
回调块对此非常有用.
Callback blocks are great for this.
[self loadSomethingWithCallback:^(NSArray *results) {
NSLog(@"%@", results);
}];
这篇关于在方便的方法中包装基于块的API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文