不変/可変タイプの2セットがあります。
@class AAA;
@class BBB;
@class MutableAAA;
@class MutableBBB;
@interface AAA : NSObject
@property (readonly,nonatomic,copy) BBB* bbb;
@end
@interface BBB : NSObject
@property (readonly,nonatomic,copy) AAA* aaa;
@end
@interface MutableAAA : AAA
@property (readwrite,nonatomic,copy) MutableBBB* bbb;
@end
@interface MutableBBB : BBB
@property (readwrite,nonatomic,copy) MutableAAA* aaa;
@end
Objective-C は戻り型の共分散をサポートしているため、これは完全に合法ですが、問題は 2 つのクラスが相互に参照していることです。定義する前にMutableBBB
が のサブクラスであることをコンパイラに知らせる方法がわかりません。BBB
もちろん、これを回避するためにカテゴリにフォールバックできますが、これは追加のメソッドではなく必須のクラス定義の一部であるため、プライマリ インターフェイス本体でこれらを定義したいと考えています。
現在、Clang は警告を生成しています。警告なしでこれを行うにはどうすればよいですか?
アップデート
私の意図は、可変クラス型を公開して、オブジェクト ツリーのインプレース編集を可能にすることです。readonly/readwrite
実際には関係ありません。避けたい2つの選択肢があると思います。
- カテゴリを使用しています。
- 分離された変更可能なバージョン アクセサーを追加します。( の
-mutableBytes
方法と同様NSMutableData
)
この相互参照サブクラス化を可能にする、まだ知らない未知の機能があるかどうかを知りたいだけです。