协议的"预期类型"错误,编译器应该知道

use*_*567 1 cocoa objective-c forward-declaration

最小示例"Test.h":

#import <Foundation/Foundation.h>

@protocol CallBack <NSObject>

-(void)method;

@end

@interface Test : NSObject

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

@end
Run Code Online (Sandbox Code Playgroud)

和相应的"Test.m":

#import "Test.h"

@implementation Test

-(void)callback:(CallBack*)theCallback
{
    [theCallback method];
}
@end
Run Code Online (Sandbox Code Playgroud)

这将为.m和.h文件中的CallBack参数提供"预期类型"错误.由于CallBack协议是在其他所有内容之前定义的,所以我无法理解为什么编译器无法找到它.如果我添加一个前向定义@class CallBack; 在头文件的开头,它将给我一个"接收器类型'CallBack',例如消息是一个前向声明"行[theCallback方法]的错误.

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

Rob*_*Rob 9

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

因此,您可能需要:

@protocol CallBack <NSObject>

-(void)method;

@end

@interface Test : NSObject

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

@end
Run Code Online (Sandbox Code Playgroud)

@implementation Test

-(void)callback:(id <CallBack>)theCallback
{
    [theCallback method];
}
@end
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅使用Objective-C编程指南中的使用协议.