使用参数调用数组中的块
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();
将不再有效。当您错误地声明块时,该行是未定义的行为。
我已经看到关于调用存储在数组中的块的答案,但我无法让它与参数一起工作。
我将数组存储为对象的一部分,然后当它在方法中时,我想调用它,但是,我需要参数。
还有,参数有没有限制。
最后,我不想对变量使用额外的存储空间,所以在数组中直接调用会更好。
__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();
将不再有效。当您错误地声明块时,该行是未定义的行为。