1

NSDictionary 引数を取るメソッドがあります。この NSDictionary には、事前定義されたキーがいくつかあります。すべての obj は文字列でなければなりません。ただし、特定の文字列 obj のみが各キーに対して有効です。したがって、私のアプローチは、キーごとに有効な文字列ごとに NSString を typedef することでした。NSString クラスを拡張しないことを望んでいます。

いくつかの NSString を typedef しました...

typedef NSString MyStringType

次に、いくつか定義します...

MyStringType * const ValidString = @"aValidString";

これが私のサンプルメソッドでやりたいことです..

- (void)setAttrbiutes:(NSDictionary *)attributes {
  NSArray *keys = [attributes allKeys];
    for (NSString *key in keys) {
      if ([key isEqualToString:@"ValidKey"]) {
        id obj = [attributes objectForKey:key];
        //Here's where I'd like to check..
        if (**obj is MyStringType**) {
        }
      }
    }
}

NSDictionary の obj 型の問題を解決するためのより良いアプローチがあれば、他のアイデアを受け入れます。

4

3 に答える 3

2

そのようには機能しません。typedef はコンパイル時のエイリアスであり、辞書を介して渡されても存続しません。

いずれにせよ、このようなものに typedef を使用するのは扱いにくいでしょう。

プロジェクトまたはコード内のファイルとして、さまざまなキーと有効な値の仕様を含むプロパティ リストを作成し、文字列と値を渡して文字列を検証できる小さなバリデータを作成することをお勧めします。 -有効性のための値のペア。

これにより、将来的にバリデーターを拡張する柔軟性も得られます。たとえば、1 から 20 の範囲しかない @"Duration" キーがあるとします。

于 2013-05-05T00:10:51.743 に答える
0

特別な値を設定する代わりに、typedef可能なオプションの 1 つNSSetは、特別な値の を作成することです。次に、コードで、辞書内のオブジェクトがセット内にあることを確認できます。

于 2013-05-05T00:11:24.433 に答える