0

Cityというスーパークラスと、このクラスから継承する一連のサブクラスがあります。たとえば、ロンドンとニューヨーク。これらの各サブクラスには、独自のメソッドとインスタンス変数があります。

アプリが起動したら、現在の場所をジオコーディングし、現在いる都市に応じてサブクラスをインスタンス化します。

現在、これらのクラスにアクセスするために複数のプロパティが定義されているので、

@property (nonatomic, strong) London *london;
@property (nonatomic, strong) NewYork *newYork;
...
...

一度に存在する必要があるのはこのタイプのオブジェクトが1つだけなので、このオブジェクトにアクセスするために定義されたプロパティは1つだけです。何かのようなもの

@property (nonatomic, strong) City *city;

複数のプロパティを宣言せずに、必要なサブクラスを動的に作成する方法はありますか?

4

2 に答える 2

2

あなたは間違いなくObjective-Cでサブクラスを実装することができます。都市をインスタンス化するには、次のように実行できます。

self.city = [[NewYork alloc] init];

都市固有のメソッドを呼び出すには:

if ([self.city isKindOfClass:[NewYork class]])
{
      // call some NewYork methods e.g..
      [(NewYork *)self.city doNewYorkThing];
}
else if ([self.city isKindOfClass:[London class]])
{
      // call some London methods e.g.
      [(London *)self.city doLondonThing];
}

メソッド「isKindOfClass:」、「isMemberOfClass:」、「conformsToProtocol:」、および「respondsToSelector:」は、慣れるための便利なクラスメソッドです。

于 2012-05-19T16:08:11.260 に答える
1

「動的に」は柔軟な概念です。:)あなたは確かに次のようなものを書くことができます...

self.city = [[London alloc] init];

...次に、Cityで定義されているメソッドを使用します。Londonが独自の実装を定義している場合は、これらのメソッドのオーバーライドされたバージョンを取得します。それがロンドンのオブジェクトであることを本当に本当に知っている場合は、次のこともできます。

[(London *)city somethingSpecial];
于 2012-05-19T15:53:54.287 に答える