7

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

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

@end

我认为这会起作用,但我得到了错误

'(' 标记之前的预期说明符限定符列表

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

4

2 回答 2

17

NSArray *你应该在你的 ivar 定义中去掉括号:

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

@end

另外,我强烈建议您使用 atypedef来更清晰:

typedef NSArray * (^Strategy)(void);

@interface SSTaskStrategy : NSObject {
   Strategy block;
}

@end

这使您可以使用名称来引用此块,Strategy而不必每次希望引用它时都使用时髦的语法。

于 2010-11-10T19:33:31.583 回答
2
@interface SSTaskStrategy : NSObject {
    NSArray* (^strategy)(void);
}

您不需要将( )返回类型放在周围。

于 2010-11-10T19:27:45.157 回答