使用参数调用数组中的块

invoking block in array with parameters

我已经看到关于调用存储在数组中的块的答案,但我无法让它与参数一起工作。

我将数组存储为对象的一部分,然后当它在方法中时,我想调用它,但是,我需要参数。

还有,参数有没有限制。

最后,我不想对变量使用额外的存储空间,所以在数组中直接调用会更好。

__block int x = 123; //  x lives in block storage
void (^printXAndY)(int) = ^(int y) {
    x = x + y;
    NSLog(@"X and Y: %d %d\n", x, y);
};

self.blocks = @[printXAndY];
printXAndY(10); // this works

    void(^block)(void) = self.blocks[0];
    block(); // this works
    block(10); // this doesn't work
    [self.blocks[0] invoke ];

问题出在这一行:

void(^block)(void) = self.blocks[0];

您正在声明 'block' 不带任何参数并且 return 不带任何参数。如果想让块带参数,需要这样声明:

void(^block)(int) = self.blocks[0];

请注意,block(); 将不再有效。当您错误地声明块时,该行是未定义的行为。