1

オブザーバー パターンを実装するためのプロトコルを定義する 2 つのファイルがあり、そのうちの 1 つからコンパイル エラーが発生します。

// ObserverDelegate.h
#import <Foundation/Foundation.h>


@protocol ObserverDelegate <NSObject>
@required
@end


// ObservableDelegate.h
#import <Foundation/Foundation.h>
#import "ObserverDelegate.h"
@protocol ObservableDelegate <NSObject>
@required
-(void) addObserver: (ObservableDelegate*) observer; // ERROR ON THIS LINE WHEN COMPILE
@end

ObserverDelegateとの .h ファイルしかObservableDelegateありません。対応する .m ファイルはありません。

エラーは、行の ObserveableDelegate.h に「型が必要です」と表示されます-(void) addObserver: (ObservableDelegate*) observer;

4

1 に答える 1

8

ObservableDelegateタイプではなく、プロトコルの名前です。メソッド パラメーターの型として使用することはできません。メソッドへの引数がそのプロトコルに準拠することを要求する場合は、次のように表現します。

- (void)addObserver: (id<ObservableDelegate>)observer;

これは、メソッドが に準拠する任意のオブジェクト ( id「ジェネリック」ポインター) を取ることを示していObservableDelegateます。必要に応じてより具体的な型を使用できますid。たとえば、デリゲートも常にUIViewControllerサブクラスにする必要があることがわかっている場合です。

于 2012-05-18T23:12:08.473 に答える