5

ヒヤス

私はこのインターフェースを持っています:

typedef void (^RMIteratorCompletionBlock) (void);

@interface RMAsyncIterator<__covariant T> : NSObject

+(RMAsyncIterator<T>*) iteratorWithArray:(NSArray<T>*) array;

-(id) init NS_UNAVAILABLE;
-(id) initWithArray:(NSArray*) array NS_DESIGNATED_INITIALIZER;

-(void) iterateWithWorkerBlock:(void (^) (T object, RMAsyncIterator<T>* iterator)) block withCompletionBlock:(RMIteratorCompletionBlock) completionBlock;
-(void) advance;
-(void) complete;

@end

今、この実装方法を使用すると:

-(void) iterateWithWorkerBlock:(void (^) (id object, RMAsyncIterator* iterator)) block withCompletionBlock:(RMIteratorCompletionBlock) completionBlock {

iterateWithWorkerBlock:withCompletionBlock の実装でパラメーターの型が競合しているというコンパイラの警告が当然表示されます。

問題は、この実装メソッドをどのように記述することになっているのですか? さまざまな実装を試してみましたが、型を typedef に移動することは失敗しました。これは、型がインターフェイス スコープの外では見えないためです。T を実装の型として使用すると失敗します。明らかに、実装は独自のインターフェイス型について nada を知っているためです。何かのようなもの

-(void) iterateWithWorkerBlock:(void (^) (<__covariant T> object, RMAsyncIterator* iterator)) block withCompletionBlock:(RMIteratorCompletionBlock) completionBlock {

惨めに失敗し、このメソッドを正しく実装する方法が本当にわかりません。今のところ、この警告を表示する id を使用するだけですが、警告を取り除きたいです...

ビューラー?誰?ありがとう

4

1 に答える 1