2

BaseRequest クラスを作成しました。これには、BaseParams プロトコルに準拠したプロパティがあります。次に、BaseRequest から継承した DiagramReqesut クラスを作成しました。このクラスには、DiagramParam 準拠の BaseParams プロトコルを型とするプロパティもあります。

コンパイルしても安全だと思いますが、xcode は引き続き次のように警告します。

なぜだろう。

簡易デモはこちら:

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
4

2 に答える 2

4

DiagramParamsのインターフェイス定義を の前に配置すると、警告が削除される場合がありますDiagramRequest

ここで私の答えを参照してください

于 2013-01-31T18:06:09.397 に答える
0

UITextRange のサブクラスであるクラス DTTextRange にも同じ問題があり、すべての UITextInput メソッドには抽象クラスである UITextRange が必要です。

タイプとして DTTextRange を指定する selectedTextRange プロパティがある場合、DTTextRange が UITextRange と互換性がないという同じ警告が表示されます。

バグを解消する唯一の方法は、自分のプロパティでもスーパークラスを使用することでした。

要するに、私はあなたと同じことができるようになりたいと思っています。プロパティ タイプを変更する方法を見つけたらお知らせください。

そうでない場合は、サブクラス プロパティを削除し、代わりに id を使用する必要があります。

于 2012-12-18T06:06:59.910 に答える