我正在试图弄清楚如何声明一个将块作为参数的方法,并且只记录来自外部范围的整数值。我看到的大多数示例都是在indexesOfObjectsPassingTest:
这样的Apple API上执行此操作,但我只是想创建自己的简单版本。这就是我所拥有的,目前无效:
@interface IAViewController ()
+(void)tell2:(void(^)(void)) thisBlock;
@end
...
NSInteger someInt=289456;
[IAViewController tell2:^{
NSLog(@"what is this? %i", someInt);
}];
// ? how do I make this method signature work
+(void) tell2:(void (^thisBlock)) myInt{
thisBlock(myInt);
}
如何使方法签名参数正确地输出289456?
答案 0 :(得分:3)
当您将块类型声明为Objective-C
方法的参数时,块的标识符在类型之外。所以语法如下:
@interface IAViewController ()
+(void)tell2:(void(^)(void)) thisBlock;
@end
@implementation IAViewController
- (void)someMethod {
NSInteger someInt=289456;
[IAViewController tell2:^{
NSLog(@"what is this? %i", someInt);
}];
}
+(void) tell2:(void (^)(void))thisBlock {
thisBlock();
}
@end
答案 1 :(得分:0)
你的问题是你有文本myInt
,你应该有块名,然后你正在调用一个带有void参数的块,该参数没有在任何地方声明。
您@interface
中的方法声明正确无误。请在@implementation
中再次使用它,并放弃对myInt
的所有引用。
+(void)tell2:(void(^)(void)) thisBlock
{
// your method implementation
}