2

プログラミング用語の間違った使用を許してください、私は私の問題に対するios6ソリューションを探しています:

ヘッダーファイルに次のプロパティがあります。

@property (nonatomic, strong) AClass *myExample;

しかし、私の.mファイルでは、実際には_myExampleをAClass、BClass、またはCClassにする必要があります。

_myExample = [[BClass alloc] init]; // incompatible pointer types

これを実装するための最良の方法は何ですか

4

2 に答える 2

5

AClassおそらく、3つすべてについて真である必要があることを考慮し、プロトコルに入れてBClass、プロパティをではなく型であると宣言します。CCLassICDoSomethingProtocolid <NSObject, ICDoSomethingProtocol> myExampleAClass *

プロトコルをスキップしてそのまま使用することもできid <NSObject>ますが、コンパイル時のチェックが少なくなります。

于 2013-03-03T22:50:19.890 に答える
1

通常、XClassを作成し、XClassのAClass、BClass、およびCClassサブクラスを作成する必要があります。次に、を使用し@property (nonatomic, strong) XClass *myExample; ます。ただし、「怠惰」(プログラミングの罪ではない)の場合は、NSObjectの既存のクラスを使用するか、単にプロパティをとして宣言することができます@property (nonatomic, strong) id myExample;。(ないことに注意してください*。)

これらのいずれの場合でも、プロパティを使用する前に、プロパティを正しいサブクラスに「キャスト」する必要があります(または少なくともそうする必要があります)(スーパークラスのメソッドの呼び出しを除く)。例:int aValue = [(BClass*)self.myExample doSomeOperationOnBClass];

このようにキャストする必要性(および関連する混乱)を回避するために、3つのうち2つは常に使用されない場合でも、3つのクラスに対して個別のプロパティを宣言することは珍しくありません。(繰り返しますが、怠惰はプログラミングの罪ではありません。)

于 2013-03-03T23:10:53.167 に答える