如何引用同一标头中声明的协议类型?

时间:2014-05-07 09:48:46

标签: objective-c

我有以下结构:

//  WIWeatherService.h

@protocol WeatherRequestDelegate
- (void)didStartRequest:(WIWeatherRequest*)request;
- (void)didCancelRequest:(WIWeatherRequest*)request;
- (void)didReceiveResult:(WIWeatherResult*)result ForRequest:(WIWeatherRequest*)request;
- (void)request:(WIWeatherRequest*)request DidFailWithError:(NSError*) error;
@end

@interface WIWeatherRequest : NSObject

@property (strong, nonatomic) id<WeatherRequestDelegate> delegate;

@end

问题是协议未知接口(因为它稍后声明),反之亦然,如果我在接口之后声明协议。如果我将协议声明移动到一个单独的文件,编译器可能会抱怨循环依赖。

有没有办法解决这种情况?

1 个答案:

答案 0 :(得分:2)

解决方案非常标准,它被称为前向声明

添加

@class WIWeatherRequest;

一开始。

前瞻性声明具有以下含义:
编译器,请知道标识符WIWeatherRequest是一个类。我稍后会定义

这是C语言的继承,当时编译器一次只能读取1个文件,而且只能从上到下依次排列(实际原因是C引入了标题。每个标题都是一个大转发声明)。