替换块内的块

Replacing a block inside a block

我创建了一个 class 定义如下:

HEADER

typedef void (^myBlock)(NSString *value);

- (instancetype)initWithIdentifier:(NSString *)identifier
                    runOnSelection:(myBlock)runOnSelection;

当我初始化这种 object 时,我会:

MyObject *object = [[MyObject alloc] initWithIdentifier:@"my id"
         runOnSelection:^(NSString *value){
                                doThis();
                                doStuff();
                               doSomethingElse();
        }];

问题是我有很多 object 按顺序被初始化,并且都做同样的事情。

我正在考虑为 doThisdoStuffdoSomethingElse 创建一个块,如下所示:

void (^doALot)(NSString *value) = ^void(NSString *value) {
                doThis();
                doStuff();
                doSomethingElse();
};

并用类似

的东西替换初始化
MyObject *object = [[MyObject alloc] initWithIdentifier:@"my id"
         runOnSelection:doALot()];

但问题是 doALot 需要一个参数。我如何将块附加到类似的东西上?

我知道我能做到

MyObject *object = [[MyObject alloc] initWithIdentifier:@"my id"
         runOnSelection:^(NSString *value){
                  doALot(value)
       }];

但我想知道我是否可以通过简单地将两者连接起来而不必将其放入块中来做到这一点。如果我没记错的话,我已经看到 Apple 在其具有处理程序的 API 时这样做,您可以在外部或内部定义处理程序,所以我怀疑这是可能的。

怎么办?

像下面这样创建新的块对象-

typedef void (^myBlock)(NSString *value);

myBlock block=^(NSString *value){
    doThis();
    doStuff();
    doSomethingElse();
};

并用

之类的东西替换初始化
MyObject *object = [[MyObject alloc] initWithIdentifier:@"my id"
         runOnSelection:block];

希望对您有所帮助!