私は代わりに行う方法に興味があります:
- (id)init {
if ((self = [super init])) {
//initialize subclass objects
}
return self;
}
スーパークラス オブジェクトの境界を渡してサブクラスを初期化する
- (id)initWithSuperclass:(Superclass *)superclassObject {
if ((self = superclass)) {
//initialize subclass objects
}
return self;
}
これは可能ですか?もしそうなら、それは私が避けるべきものですか? 私には臭いコードの匂いがしますが、スーパークラスのすべてのデータフィールドを知らずに、スーパークラスオブジェクトのすべてのデータフィールドをサブクラスの初期化に渡す別の方法はわかりません。
私の考えに従っている/この...臭いコードを解決するのを手伝ってくれる人はいますか?
編集:
わかりましたので、以下にクラス A とクラス B があるとします。
@interface A
//stuff but we don't know what
end
@implementation A
- (id)init {
if (self = [super init]) {
//initialize A "stuff"
}
return self;
}
end
@interface B : A
@property (nonatomic, retain) UIButton* one;
- initWithA:(A*)superclassObject;
end
@implementation B
- (id)initWithA:(A*)superclassObject {
if ((self = superclassObject)) {
one = [[UIButton alloc] init];
}
return self;
}
end
私が探しているこれを行う利点は、クラスAでは、アクセスできるコード/コードではないため、すべてのデータフィールドを知らないことです。ただし、そのクラスを拡張する必要があります。クラス B の新しいデータ値 (上記の例の「UIButton one」など) を導入することで、クラス A のインスタンスをクラス B に変更できるようにしたいと考えています。 A.