我创建了一个 BaseRequest 类,它具有符合 BaseParams 协议的属性。接下来我创建了一个从 BaseRequest 继承的 DiagramReqesut 类,它有一个属性,其类型也是 DiagramParam 符合 BaseParams 协议。
我认为编译是安全的,但 xcode 仍然警告:属性类型 'DiagramParams *' 与继承自 'BaseRequest' 的类型 'id' 不兼容
我想知道为什么。
简化的演示在这里:
BaseRequest.h
@interface BaseRequest
@property (nonatomic,retain) id<BaseParams> params;
@end
@protocol BaseParams <NSObject>
- (NSMutableDictionary *)getParamsDict;
@end
DiagramRequest.h
@interface DiagramRequest : BaseRequest
//warning: Property type 'DiagramParams *' is incompatible with type 'id<BaseParams>' inherited from 'BaseRequest'
@property (nonatomic,retain) DiagramParams *params;
@end
@interface DiagramParams : NSObject <BaseParams>
@property (nonatomic) int id;
@property (nonatomic,retain) NSString *city;
- (NSMutableDictionary *)getParamsDict;
@end