使用参数调用数组中的块

时间:2015-03-14 19:25:19

标签: ios arrays objective-c-blocks

我已经看到了关于调用存储在数组中的块的答案,但我无法使用参数。

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

此外,参数是否有任何限制。

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

__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 ];

1 个答案:

答案 0 :(得分:1)

问题在于这一行:

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

您声明'阻止'不带参数并且不返回任何内容。如果您希望块接受参数,则需要声明如下:

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

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