objective-c - 协议(protocol)定义中的编译器错误 "expected a type"

标签 objective-c compiler-errors protocols

我有两个定义协议(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 的 .h 文件和 ObservableDelegate ,没有对应的 .m 文件。

错误在 -(void) addObserver: (ObservableDelegate*) observer; 行的 ObserveableDelegate.h 中显示“预期类型”

最佳答案

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

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

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

关于objective-c - 协议(protocol)定义中的编译器错误 "expected a type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10660803/

相关文章:

ios - 获取某些 View 的屏幕截图到相机胶卷 iOS

ios - 带有 NSDictionary、NSArray、JSON 和 HTML 数据的 NSPredicate

arrays - 如何将字符串转换为byte() vb.net?

ios - 链接器命令错误 : 'ld: symbol(s) not found for architecture i386'

ios - 数据未插入 sqliteDB iOS 中

ios - 添加多个 UIWindow

ios - "Duplicate symbols"没有明显原因的链接器错误

swift - 您可以在协议(protocol)中强制执行类型转换而不定义属性/方法吗?

ios - Swift 覆盖协议(protocol)扩展保持扩展行为

ios - 从模态呈现的 View Controller 传回数据的委托(delegate)