声明一个采用Block的方法

时间:2013-08-11 19:50:35

标签: objective-c syntax objective-c-blocks

我正在试图弄清楚如何声明一个将块作为参数的方法,并且只记录来自外部范围的整数值。我看到的大多数示例都是在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?

2 个答案:

答案 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
}