0

假设一个类已经定义如下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;ExtendedObject.h

Property type 'id<ExtendedDelegate> _Nullable' is incompatible with type 'id<OriginalDelegate> _Nullable' inherited from 'OriginalObject'

看来编译器不知道ExtendedDelegate会符合OriginalDelegate​​ . 将完整的协议声明移到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

我想知道的是……有没有办法在前向声明中告诉编译器ExtendedDelegate符合OriginalDelegate(允许使用更像ExtendedObject.h上面第一个版本的东西)?


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

@protocol ExtendedDelegate <OriginalDelegate>;
@protocol ExtendedDelegate : OriginalDelegate;
4

0 回答 0