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

我只有 .h 文件ObserverDelegateObservableDelegate,没有对应的 .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 回答