我有以下结构:
// 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
问题是协议未知接口(因为它稍后声明),反之亦然,如果我在接口之后声明协议。如果我将协议声明移动到一个单独的文件,编译器可能会抱怨循环依赖。
有没有办法解决这种情况?
答案 0 :(得分:2)
解决方案非常标准,它被称为前向声明
添加
@class WIWeatherRequest;
一开始。
前瞻性声明具有以下含义:
编译器,请知道标识符WIWeatherRequest是一个类。我稍后会定义。
这是C语言的继承,当时编译器一次只能读取1个文件,而且只能从上到下依次排列(实际原因是C引入了标题。每个标题都是一个大转发声明)。