最小示例“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/