2012-05-18 55 views
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 

我只有ObserverDelegateObservableDelegate,有沒有相應的.m文件.h文件。

錯誤說「預期型」上線的ObserveableDelegate.h -(void) addObserver: (ObservableDelegate*) observer;

回答

8

ObservableDelegate不是一個類型,它的協議的名稱。您不能將其用作方法參數的類型。如果你想要求該參數的方法符合該協議,則表示它是這樣的:

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

這是說,該方法需要一個符合ObservableDelegate任何對象(id是「通用的」指針) 。如果需要,您可以使用比id更具體的類型,例如,您也可以知道該代表也應始終爲UIViewController子類。

+0

哦,我明白了,謝謝,你救了我的命,但請告訴我在java中,我可以做我剛剛做的..謝謝,它唯一的目標c就是這樣, – user1118019

+1

很酷的感謝,但我得到另一個錯誤, id 的元素)觀察者... incompattilble指針類型將'__autoreleasing id'發送到類型id的參數 – user1118019

相關問題