7

継承によって定義されるのではなく、インラインで戦略を定義できるようにする、Objective-C で非常に単純な戦略クラスを実装しようとしています。現在、私のコードは次のようになっています。

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

@end

これでうまくいくと思ったのですが、エラーが発生しました

「(」トークンの前に指定子修飾子リストが必要です

これを機能させる方法はありますか?

4

2 に答える 2

17

NSArray *ivar 定義で括弧を削除する必要があります。

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

@end

また、typedefより明確にするために、を使用することを強くお勧めします。

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 に答える