Ios 将多个块参数传递给方法

Ios 将多个块参数传递给方法,ios,objective-c,block,objective-c-blocks,Ios,Objective C,Block,Objective C Blocks,最好的做法是对一个方法只使用一个块参数 是否可以传递多个块参数;还是应该避免这种情况 具体来说,这里有几个我正在使用的选项(我希望使用第一个): 或 或 对,;AFNetworking已经在使用成功/失败块语义,因此这是可以肯定的。由于iOS SDK在方法中使用了几个块参数,因此可以用这种方式实现自定义代码 具有2个块参数的iOS标准方法示例: [UIView animateWithDuration:animationDuration animations:^{ } completion:^(

最好的做法是对一个方法只使用一个块参数

是否可以传递多个块参数;还是应该避免这种情况

具体来说,这里有几个我正在使用的选项(我希望使用第一个):


对,;AFNetworking已经在使用成功/失败块语义,因此这是可以肯定的。

由于iOS SDK在方法中使用了几个块参数,因此可以用这种方式实现自定义代码

具有2个块参数的iOS标准方法示例:

[UIView animateWithDuration:animationDuration animations:^{

} completion:^(BOOL finished) {

}];

使用多个方块作为参数将扭曲你的思维,弯曲你的脊柱,使敌人赢得战争。(套用乔治·卡林的话)

除了开玩笑,只有一个块参数是一个很好的目标,但正如其他人所指出的,Apple有很多类的方法都有多个块。在设计使用多个块参数的API之前,请花一些时间考虑替代方案,并思考它对代码的可读性和可维护性有何影响。有没有更简单的方法来实现同样的目标?如果多个模块是实现目标的最干净的方式,那么就使用它

我认为你的例子是一种既有成功块又有失败块的方法,这是非常合理的。您可以将其重构为一个单独的块,其中包含BOOL参数“success”,并在块中查询该参数以决定要执行的操作。(CAAnimation委托方法
animationDidStop:finished:
使用这种方法。实际上,UIView动画中的完成块也使用这种方法。)


您必须决定这是使方法和传递给它的块更简单、更清晰还是更复杂。

我不介意多个块;然而,像这样使用多个块往往会让我非常沮丧。有些人会不同意,但如果我发送一个操作,我不想要两个单独的答案,我想要一个包含我需要的信息的答案。不要发送成功/错误,如果有错误,只需包含错误值。话虽如此,对于动画和完成这类事情,有些情况下是有益的

我真的更喜欢处理这样的事情:

-(void) doSomethingWithCompletionBlock:(void(^)(NSError *))completionBlock;
然后:


您引用的文档回答了您的问题:)最佳做法是只传递一个块(通常作为最后一个参数,我认为这主要是因为格式和易读性会受到影响。也就是说,通常(尤其是成功/失败块)会有两个块的方法。Apple在
UIView中有示例(UIViewAnimationWithBlocks)
和其他地方,所以这当然是允许的。“最佳实践”并不意味着你必须这样做,它意味着如果你不这样做,你需要考虑为什么?
-(void) doSomethingWithCallbackBlock:(void (^)(BOOL, NSError *)) callbackBlock
[UIView animateWithDuration:animationDuration animations:^{

} completion:^(BOOL finished) {

}];
-(void) doSomethingWithCompletionBlock:(void(^)(NSError *))completionBlock;
[self doSomethingWithCompletionBLock:^(NSError * error) {

    if (!error) {
        // Success  
    }
    else {
        // Failure 
    } 

}];