objective-c - "Expected a Type"编译器应该知道的协议(protocol)错误

标签 objective-c cocoa forward-declaration

最小示例“Test.h”:

#import <Foundation/Foundation.h>

@protocol CallBack <NSObject>

-(void)method;

@end

@interface Test : NSObject

-(void)callback:(CallBack*)theCallback;

@end

以及对应的“Test.m”:

#import "Test.h"

@implementation Test

-(void)callback:(CallBack*)theCallback
{
    [theCallback method];
}
@end

这将为 .m 和 .h 文件中的 CallBack 参数提供“预期类型”错误。由于回调协议(protocol)是在其他所有内容之前定义的,我不明白为什么编译器找不到它。如果我添加一个前向定义@class CallBack;在头文件的开头,它会给我一个“接收器类型‘CallBack’,例如消息是前向声明”行[theCallback方法]的错误。

为什么编译器找不到协议(protocol)?

最佳答案

引用符合 CallBack 的对象的正确语法协议(protocol)是 id<CallBack> .

因此,您可能想要:

@protocol CallBack <NSObject>

-(void)method;

@end

@interface Test : NSObject

-(void)callback:(id <CallBack>)theCallback;

@end

@implementation Test

-(void)callback:(id <CallBack>)theCallback
{
    [theCallback method];
}
@end

有关详细信息,请参阅 Working with Protocols使用 Objective-C 编程指南中。

关于objective-c - "Expected a Type"编译器应该知道的协议(protocol)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20053832/

相关文章:

c++ - 调用循环依赖类的成员方法

C++ boost前向声明问题

c - 为什么返回类型的存在使得不需要对参数进行前向声明?

iPhone-Sqlite :Constraint failed error

objective-c - 在 Swift 中查找而不是过滤数组

objective-c - 如何将导入添加到生成的 module-swift.h 文件中?

objective-c - Apple Mach-O 框架错误

ios - 如何检查 UIButton 是否有目标?

objective-c - Mac 应用程序的窗口大小

swift - 如何在异步迭代中设置DispatchGroup?