具有完成块的通用Obj-C方法的方法体

时间:2014-03-25 00:49:14

标签: objective-c objective-c-blocks

我喜欢使用animateWithDuration:options:completion。我遇到过一些情况,我可以在没有动画的情况下将它用于我自己的场景,但是我在编写方法体时遇到了困难。显然,我不能只查看UIView的代码,只能看它的签名。

这是我的尝试(我的方法签名也可能都搞砸了):

.h
+(void)performGenericBlock:(void(^)(BOOL))code actionWhenDone:(void(^)(void))action;

.m
+(void)performGenericBlock:(void(^)(BOOL))code actionWhenDone:(void(^)(void))action
{
   //Kind of lost here - here is psuedocode
   [do stuff:^(BOOL done){action}];
}

基本上我想完成:

执行第一个代码块,完成后,执行第二个代码块。

1 个答案:

答案 0 :(得分:0)

不确定为什么需要两个参数,你应该能够在原始块中编写代码。

在以下示例中,假设我们首先要调用[self.test foo1]然后调用[self.test foo2]。

最简单的解决方案是根本不创建新方法。只需致电您的代码:

[self.test foo1];
[self.test foo2];

foo2将在foo1之后执行。

第二个最简单的解决方案是只用一个参数创建函数:

[ViewController performGenericBlock:^{
    [self.test foo1];
    [self.test foo2];
}];

如果您确实需要2个参数,则可以执行以下操作:

[ViewController performGenericBlock:^{
    [self.test foo1];
} actionWhenDone:^{
    [self.test foo2];
}];

...并定义方法如下:

+ (void)performGenericBlock:(void(^)(void))code actionWhenDone:(void(^)(void))action {
    code();
    action();
}