3

このように一覧表示されたプロパティ データがたくさんありますが、もっときれいに書きたいと思っています。これをよりきれいに書くには、どのような方法をお勧めしますか? 私はこれらよりも多くのプロパティ データを持っています。

@property (strong,nonatomic) NSString *energyEnhancer;
@property (strong,nonatomic) NSString *energyEnhancer1;
@property (strong,nonatomic) NSString *energyEnhancer2;
@property (strong,nonatomic) NSString *energyEnhancer3;

ビューコントローラー間でデータを渡しているため、プロパティが必要です。

4

4 に答える 4

3

簡単な答え:

iOS 開発者コレクション リファレンス


一部始終:

、、NSDictionaryなどのコレクションを扱う Foundation クラスのいくつかをより広く見てみるとよいと思います。特に難解だと感じている場合は、.NSArrayNSSetCFBag

あなたの質問は、一般的な Cocoa パターンを読むことで利益が得られることを示唆しています。実際、あるオブジェクトから別のオブジェクトに何でも渡すことができます。NSArrayインスタンスは確かに複数のNSStringインスタンスと同じです。

たとえば、"PassingData" (GitHub リンク)というアプリがあるとします。データを持つクラスを定義します。この場合は、いくつかの「energyEnhancer」文字列です。

@interface PDDataSource : NSObject

@property (nonatomic, strong) NSString *engergyEnhancer;
@property (nonatomic, strong) NSString *engergyEnhancer2;
@property (nonatomic, strong) NSString *engergyEnhancer3;

@end

次に、ビュー コントローラーで、次のようにエネルギー エンハンサーにアクセスしようとします。

- (void)logDataSourceWithStrings {

    NSLog(@"Energy enhancer 1: %@", self.dataSource.energyEnhancer);
    NSLog(@"Energy enhancer 2: %@", self.dataSource.energyEnhancer2);
    NSLog(@"Energy enhancer 3: %@", self.dataSource.energyEnhancer3);
}

これを行う別の方法は次のようになります。

- (void)logDataSourceWithArray {

    for(NSInteger i = 0; i < self.dataSource.enhancers.count; i++) {
        NSLog(@"Enhancer %i: %@", i, self.dataSource.enhancers[i]);
      }
}

配列を使用するもう 1 つの利点は、コンパイル時に宣言した変数の数に制限されないことです。ゲームやフィットネス アプリの堅牢性が大幅に向上しました。

これは、別のオブジェクトにあるデータにアクセスする唯一の方法です。その他の強力な候補は、デリゲート プロトコル、通知、およびコールバック ブロックです。通常、別のクラスのデータに直接アクセスしている場合は、次の 3 つのいずれかを行っている可能性があります。

  1. 合成: 親クラスを支援するために存在するいくつかのオブジェクトを含むクラスを作成します。
  2. シングルトンへのアクセス。シングルトン クラスは、一度だけインスタンス化できる普遍的にアクセス可能なクラスです。それらは議論の余地がありますが、適切な使用例があります。
  3. オブジェクトに一時的な状態を保存します。

複数の種類のデータをモデル化する場合は、値 (配列、文字列、数値など) を辞書にネストすることを検討してください。ただし、常にそうであるとは限りません。NSDictionaryすべてのクラスに単一のプロパティを持たせたくありません。最善の判断をしてください。

モデリング時のもう 1 つの優れた戦略は、Xcode の plist エディターを使用してオブジェクトをモックすることです。次に、plist に一致するクラス (または複数のクラス) をコードで作成できます。

規約とCocoa Design Patternsに慣れるのに時間をかける価値は十分にあります。ロッサ運!

于 2013-08-30T16:42:45.520 に答える
2

一部の回答が示唆しているように NSArray を使用するのではなく、 Dictionary を渡す方がよいと思います。これは、配列内の順序に依存するのではなく、辞書のキーを使用して正しい値を取得していることを確認できるため、配列よりも堅牢です。

于 2013-08-30T16:45:30.423 に答える
1

このように書くことができます..

@property (strong,nonatomic) NSString *energyEnhancer,*energyEnhancer1,*energyEnhancer2,*energyEnhancer3;
于 2013-08-30T16:44:08.353 に答える