我已经看到了关于调用存储在数组中的块的答案,但我无法使用参数。
我将数组存储为对象的一部分,然后当它在方法中时,我想调用它,但是,我需要参数。
此外,参数是否有任何限制。
最后,我宁愿不对变量使用额外的存储空间,因此在数组中直接调用会更好。
__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 ];
答案 0 :(得分:1)
问题在于这一行:
void(^block)(void) = self.blocks[0];
您声明'阻止'不带参数并且不返回任何内容。如果您希望块接受参数,则需要声明如下:
void(^block)(int) = self.blocks[0];
请注意,block();
将不再有效。当您错误地声明块时,该行是未定义的行为。