如何解决两个协议,它们都引用另一个协议

时间:2014-02-03 11:46:42

标签: objective-c protocols

我正在尝试创建几个协议,其中大多数都引用了其他协议。但是在构建过程中我遇到了错误。

我举个例子:

#import <Foundation/Foundation.h>

@protocol DataChildDelegate <NSObject>

@property(nonatomic) id<DataParentDelegate> parent;

@end

@protocol DataParentDelegate <NSObject>

@property(nonatomic) id<DataChildDelegate> firstChild;
@property(nonatomic) id<DataChildDelegate> lastChild;

@end

我尝试将 DataChildDelegate 划分为两部分,如下所示:

#import <Foundation/Foundation.h>

@protocol DataChildDelegate <NSObject>
@end

@protocol DataParentDelegate <NSObject>

@property(nonatomic) id<DataChildDelegate> firstChild;
@property(nonatomic) id<DataChildDelegate> lastChild;

@end

@protocol DataChildDelegate <NSObject>

@property(nonatomic) id<DataParentDelegate> parent;

@end

但是这次我收到警告。

有没有更合适的方法来处理这个问题?

由于

1 个答案:

答案 0 :(得分:2)

您应该在DataChildDelegate之前使用协议DataParentDelegate的前向声明,以便编译器可以信任它存在。

例如:

#import <Foundation/Foundation.h>

@protocol DataChildDelegate;     /*Forward declaration of DataChildDelegate */

@protocol DataParentDelegate <NSObject>

@property(nonatomic) id<DataChildDelegate> firstChild;
@property(nonatomic) id<DataChildDelegate> lastChild;

@end

@protocol DataChildDelegate <NSObject>

@property(nonatomic) id<DataParentDelegate> parent;

@end