是否可以将块定义为类的成员?

时间:2010-11-10 19:26:05

标签: objective-c objective-c-blocks

我正在尝试在Objective-C中实现一个非常简单的策略类,它允许在内联定义策略而不是通过继承定义策略。目前我的代码如下所示:

@interface SSTaskStrategy : NSObject {
    (NSArray *)(^strategy)(void);
}

@end

我认为这会有效,但我收到了错误

  

'('token

之前的预期说明符限定符列表

任何想法如何使这项工作?

2 个答案:

答案 0 :(得分:17)

您应该将NSArray *的括号放在ivar定义中:

@interface SSTaskStrategy : NSObject {
    NSArray * (^strategy)(void);
}

@end

此外,我强烈建议您使用typedef以获得更清晰:

typedef NSArray * (^Strategy)(void);

@interface SSTaskStrategy : NSObject {
   Strategy block;
}

@end

这允许您使用名称Strategy引用此块,而不是每次要引用它时都必须使用时髦的语法。

答案 1 :(得分:2)

@interface SSTaskStrategy : NSObject {
    NSArray* (^strategy)(void);
}

您无需在返回类型周围添加( )