在Objective-C协议前向声明中声明协议一致性

时间:2020-06-18 01:25:17

标签: objective-c protocols objective-c-protocol

假设在OriginalObject.h中定义了这样的类:

@protocol OriginalDelegate;

@interface OriginalObject : NSObject  {}
@property (nullable, nonatomic, weak) id<OriginalDelegate> delegate;
@end

@protocol OriginalDelegate <NSObject>
// … delegate method declarations …
@end

现在,在ExtendedObject.h中,我想这样做:

#import "OriginalObject.h"

@protocol ExtendedDelegate;

@interface ExtendedObject : OriginalObject {}
@property (nullable, nonatomic, weak) id<ExtendedDelegate> delegate;
@end

@protocol ExtendedDelegate <OriginalDelegate>
// … additional delegate method declarations …
@end

尝试这样做会在@property … delegate;的{​​{1}}行上给我以下警告:

ExtendedObject.h

似乎编译器不知道Property type 'id<ExtendedDelegate> _Nullable' is incompatible with type 'id<OriginalDelegate> _Nullable' inherited from 'OriginalObject' 将符合ExtendedDelegate。将完整协议声明移至OriginalDelegate的{​​{1}}接口上方可以解决以下警告:

ExtendedObject

我想知道的是... 有什么方法可以在向前声明中告诉编译器 ExtendedObject.h将符合#import "OriginalObject.h" @protocol ExtendedDelegate <OriginalDelegate> // … additional delegate method declarations … @end @interface ExtendedObject : OriginalObject {} @property (nullable, nonatomic, weak) id<ExtendedDelegate> delegate; @end < / strong>(可以使用上面的ExtendedDelegate的第一个版本)?


以下任何这样的前向声明尝试似乎都不是有效的语法:

OriginalDelegate

0 个答案:

没有答案