私は Objective-C にかなり慣れていないので、これが StackOverflow に関する最初の質問です。明らかな何かが欠けている場合は、あらかじめご容赦ください。
コンパイラの警告が表示されます
"Semantic Issue: Property type 'B *' is incompatible with type 'A *' inherited from 'X'"
コードは引き続きコンパイルされ、期待どおりに動作します。コンパイラの警告を削除するために別のことをする必要があるかどうかを知りたいです。
次のように定義された4つのクラスがあります。
//
// *** In class header file A.h
#import "X.h"
@interface A
@property X *variable1;
@end
//
// *** In class B header file B.h
#import "Y.h"
@interface B : A // B is a subclass of A
@property Y *variable1; // More specific type for property defined in superclass
@end
//
// *** In class X header file X.h
@class A; // Forward declaration to avoid circular imports
@interface X
@property A *variable2;
@end
//
// *** In class Y header file Y.h
@class B; // Forward declaration to avoid circular imports
@interface Y : X // Y is a subclass of X
@property B *variable2; // More specific type <-- I'm getting the compiler warning here
@end
クラス Y の variable2 のプロパティ宣言で、コンパイラの警告が表示されます。このプロパティを A のサブクラスである B 型として定義しました。このプロパティは、スーパークラスで A 型として定義されています。
前方宣言の代わりにクラス Y のヘッダーに "Bh" を #import すると、コンパイラは B が A のサブクラスであることを認識し、警告は消えます。ただし、クラス B のヘッダー ファイルも "Yh" を #import するため、#import ループに陥ります。したがって、コードをコンパイルするために前方宣言を入れましたが、このコンパイラ警告が表示されます。
警告にもかかわらず、コードは期待どおりに動作します。警告が表示されないように、これを行う適切な方法があるかどうか疑問に思っています。どんな助けや洞察も大歓迎です。ありがとう!