我有以下标题:
@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个文件。还有其他选择/建议吗?
答案 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;
在文件顶部。