我讨厌积木。它们旨在使代码更简洁,但我找不到更丑陋的东西。例如,使用 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
}]
像这样的东西会好得多:
AFJSONRequestOperation* operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
requestsuccess:@selector(requestSuccess:response:json:)
failure:@selector(requestSuccess:response:error:)]
那么,是否可以将方法的选择器用作 block ?如果没有,我怎样才能使 block 代码更好?
这让我很烦,因为这些 block 似乎是 objective-c 编程的 future ,而且它们只是不可读。
最佳答案
所以您认为 block 结构使代码更难阅读? 我认为它们有时可以使事情更容易理解,尤其是在网络代码等异步上下文中。
为了更容易阅读,您可以将 block 分配给变量。 (实际上 block 是 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];
您还可以在 block 内调用单个处理程序方法以保持其较小。
关于objective-c - 有没有办法将方法作为 block 传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11351534/