协议定义中的编译器错误“期望类型”

时间:2012-05-18 23:05:49

标签: objective-c compiler-errors protocols

我有两个文件定义协议,用于实现观察者模式,我从其中一个获得编译器错误。

// 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的.h文件,没有相应的.m文件。

错误在行-(void) addObserver: (ObservableDelegate*) observer;

上的ObserveableDelegate.h中显示“预期类型”

1 个答案:

答案 0 :(得分:8)

ObservableDelegate不是类型,它是协议的名称。您不能将它用作方法参数的类型。如果您想要求方法的参数符合该协议,您可以这样表达:

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

这表示该方法采用符合id的任何对象(ObservableDelegate是“通用”指针)。如果需要,您可以使用比id更具体的类型,并且您知道,例如,委托也应该始终是UIViewController子类。