2

3 つの異なるターゲット (サッカー、野球、バスケットボールなど) を持つ Xcode プロジェクトがあり、結果として 3 つの異なるアプリが作成されます。ほとんどのコードは同じですが、ターゲット固有の場合があります。

ターゲットに固有のメソッドを実装する最良の方法は何ですか? 避けたい

if ([AppDelegate isSoccerTarget] {
   ...
} else if () {
   ...
} else if () {
   ...
}

3 つのターゲットの 1 つにのみ存在するカテゴリを使用することを考えていましたが、デフォルトの実装を使用できません。また、一部のクラスはすでにクラス階層に含まれているため、継承を避けたいと思います。それを単純に保ちたいと思います (person => player、manager を避けて、soccerPlayer、basketballPlayer などにします)。

これを行う方法は何ですか?

4

2 に答える 2

7

私がそれを処理する方法は、すべてのターゲットに追加されるスーパークラスに似ているものをすべて配置してから、ターゲットごとに異なる新しいクラス (この例では「プレーヤー」) を作成することです。

したがって、ソース ディレクトリには、サブディレクトリとファイルがあります。

バスケットボール/Player.m 野球/Player.m ...

そして、basketball/Player.m の「ターゲット メンバーシップ」を「バスケットボール」ターゲットとして選択します。

このように、Player クラスを 1 回インスタンス化するだけで、ターゲットが何であるかに応じて、適切なクラスが自動的に作成されます。お役に立てれば。

于 2013-01-03T04:21:37.440 に答える
3

Xcodeプロジェクトペイン(一番上のファイル)でターゲットを作成し、各ターゲットのタブの1つ(どのタブか忘れました)で、プリプロセッサマクロ(プリコンパイラマクロである可能性があります)にいくつかの値を追加します。 . 次に、コードでこれを行うことができます。たとえば、野球のターゲットのプリプロセッサ マクロが BASEBALL で、サッカーが SOCCER であるとします。コードは次のようになります。

...blablablaothercode...
#ifdef BASEBALL
      NSLog(@"Baseball!");
#endif
#ifdef SOCCER
      NSLog(@"Soccer!");
#endif
...blablablaothercode...

これらは、通常のコードを使用できる場所ならどこでも使用できます。これは、コンパイラが各ターゲットに使用するコードを確認するために使用できる「switch」ステートメントと考えてください。

于 2013-01-03T04:42:57.003 に答える