ldi*_*ual 10 objective-c objective-c-blocks afnetworking
我讨厌块.它们旨在使代码更简洁,但我找不到更丑陋的东西.例如,使用AFNetworking:
AFJSONRequestOperation* operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
requestsuccess:^(NSURLRequest *request, NSURLResponse *response, id JSON) {
// Some
// very
// long
// (and as ugly as blocks)
// processing
}
failure:^(NSURLRequest *request, NSURLResponse *response, NSError *error, id JSON )) {
// Failure code
}]
Run Code Online (Sandbox Code Playgroud)
这样的事情会好得多:
AFJSONRequestOperation* operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
requestsuccess:@selector(requestSuccess:response:json:)
failure:@selector(requestSuccess:response:error:)]
Run Code Online (Sandbox Code Playgroud)
那么,是否可以使用方法的选择器作为块?如果没有,我怎样才能使代码更好?
这让我感到很恼火,因为这些块似乎是Objective-c编程的未来,它们只是不可读.
所以你认为块结构使代码更难阅读?我认为它们有时可以使事情更容易理解,尤其是在网络代码等异步环境中.
为了便于阅读,您可以将块分配给变量.(确实,块是客观的对象.)
例:
typedef void(^SuccessBlock)(NSURLRequest *request, NSURLResponse *response, id JSON);
SuccessBlock successBlock = ^(NSURLRequest *request, NSURLResponse *response, id JSON) {
// code block
};
AFJSONRequestOperation* operation;
operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:successBlock
failure:nil];
Run Code Online (Sandbox Code Playgroud)
您还可以在块内调用单个处理程序方法以使其保持较小.
| 归档时间: |
|
| 查看次数: |
4507 次 |
| 最近记录: |