如何编写强大的完成块?

时间:2012-08-31 09:32:05

标签: objective-c objective-c-blocks

我正在尝试用完成块编写一个方法:

//typedef head of block
typedef void (^CommonErrors)(NSError *error);

//method with block
-(void)MethodWithString:(NSString*)string onError:(CommonErrors)ErrorBlock;

//somewhere in code:

[self MethodWithString:(NSString*) onError:^(NSError *error)ErrorBlock];

如果我双击^(NSError *error)ErrorBlock,那就没关系了  然后我会得到这段代码:^(NSError *error){code}

[self MethodWithString:(NSString*) 
               onError:^(NSError *error){
                   code
               }
];

但每次,当我使用此CommonErrors时, 我使用我的模板:onError:(CommonErrors)ErrorBlock
我的代码到处都是这样的:

onError:^(NSError *error){
    ErrorBlock(error)
}

我可以通过在某处定义此模板来完成此操作吗?或类似的东西?可能吗?

1 个答案:

答案 0 :(得分:2)

实际上我只是重读了你的问题 - 块类型永远不会在使用者方法签名中使用。这样做的原因是,如果不查看类型,其他人如何知道要传递哪些参数?

您看到的行为是设计的,块的typedef扩展为实际签名。

显然这是一个代码段问题。

请参阅此http://nearthespeedoflight.com/article/xcode_4_code_snippets