我有两个定义协议(protocol)的文件,用于实现观察者模式,并且从其中一个获取编译器错误。
// 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
和ObservableDelegate
的.h文件,没有相应的.m文件。该错误在
-(void) addObserver: (ObservableDelegate*) observer;
行上的ObserveableDelegate.h中显示“预期类型” 最佳答案
ObservableDelegate
不是类型,它是协议(protocol)的名称。您不能将其用作方法参数的类型。如果您希望方法的参数符合该协议(protocol),则可以这样表示:
- (void)addObserver: (id<ObservableDelegate>)observer;
这表示该方法采用符合
id
的任何对象(ObservableDelegate
是“通用”指针)。如果需要,可以使用比id
更具体的类型,例如,您知道委托(delegate)也应该始终是UIViewController
子类。