有人可以向我解释一下,我需要将块的声明和定义分开,如下所示:
#import <Foundation/Foundation.h>
// Main method
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSLog(@"Hello, World!");
}
}
// Working fine. This code is working fine
- (void) blockSample{
(void) (^myBLock) (id sender);
myBlock = ^(id sender){ // It working fine.
//implementation
}
return 0;
}
/* I need it most work like this.*/
// it shows me error
(void) (^myBLock) (id sender);
myBlock = ^(id sender){ // It shows me error of redefinition.
//implementation
}
答案 0 :(得分:0)
在函数外部定义变量时需要提供类型。您可以通过首先为块定义类型,或在一行中声明和定义块来实现此目的。
这对我有用:
MyClass.h:
#import <Foundation/Foundation.h>
@interface MyClass : NSObject
- (void)myMethod;
@end
MyClass.m
#import "MyClass.h"
typedef void (^MyBlockType) (id sender);
MyBlockType myBlock = ^(id sender) {
NSLog(@"It works!");
};
@implementation MyClass
- (void)myMethod {
myBlock(nil);
}
@end
然后,在其他地方......
MyClass *myClass = [MyClass new];
[myClass myMethod]; // Prints "It works!"
我建议您阅读Blocks Programming Topics中的Declaring and Creating Blocks。
答案 1 :(得分:0)
someVar = someValue;
是一个赋值语句。 C中的函数不允许使用语句。只允许在函数之外定义。因此,这是一个语法错误。
像
int foo;
foo = 5;
在功能之外同样无效。
您真正想要做的是在定义变量时初始化变量:
void (^myBLock) (id sender) = ^(id sender) { // It shows me error of redefinition.
//implementation
};