在同一文件中声明委托协议

时间:2014-07-24 19:14:43

标签: ios objective-c

我有以下标题:

@protocol AttachmentsViewDelegate <NSObject>

@required
- (void)spaceRequestedWithSize:(CGSize)size sender:(AttachmentsView*)sender;

@end

@interface AttachmentsView : UIView

@property id<AttachmentsViewDelegate> delegate;
@property NSArray *attachments;

- (void)takePicture;
- (void)deletePictures;

@end

不起作用,因为在@protocol中我引用了AttachmentsView并且它尚未声明。

如果我在@interface下面移动@protocol - 我有另一个问题,因为委托属性不知道@protocol。

我知道我可以使用id,UIView作为类型,但要保持“强类型”,我该怎么办?我真的不想将其分解为2个文件。还有其他选择/建议吗?

2 个答案:

答案 0 :(得分:2)

使用@class转发声明AttachmentsView,如下所示:

@class AttachmentsView;

@protocol AttachmentsViewDelegate <NSObject>

// Protocol method declarations...

@end

或者,使用@protocol转发声明协议:

@protocol AttachementsViewDelegate

@interface AttachmentsView : UIView

// Ivar, method, and property declarations...

@property id<AttachmentsViewDelegate> delegate;

@end

答案 1 :(得分:1)

只写:

@class AttachmentsView;

在文件顶部。

如果您希望先声明该类,然后再使用该协议,请先写:

@protocol AttachmentsViewDelegate;

在文件顶部。