2011-07-09 4 views
0

私はJavaScriptからの例を使用して質問を明確にします。のは、私は次のオブジェクトがあると仮定してみましょう:私のスクリプトの中でいくつかの点で私は単純に文字列を保持する変数、sportStringを、持っている場合Objective-C:NSString変数を使用してさまざまなオブジェクトの1つにメッセージを送信

sports = { 
    soccer: {...}, 
    basketball: {...}, 
    baseball: {...} 
} 

を、私は動的に次のようにスポーツのオブジェクトの1つを呼び出すことができます。

どのように私は何かがよ達成することができます

if(sportString === 'soccer'){ 
    sports.soccer; 
}else if(sportString === 'basketball){.... 

だから、私の質問は次のとおりです。

sports[sportString]; 

これは、ネストされたif文の束を使用することのような文字列の値をテストしてから私を解放しますsportStringがNSStringオブジェクトの場合、Objective-Cのsports [sportString]と同様ですか?

答えて

6

スポーツオブジェクトとしてNSDictionaryを使用してください。そして、あなたはこのような検索を行うことができます。

[sports objectForKey: sportsString]; 
+0

ありがとうございました。それが最初のものなので、これに答えを与える。 – maxedison

3

あなたのJavaScriptオブジェクトsportsは、一般的にNSDictionaryまたはNSMutableDictionaryだろう。 例:あなたは、一般的なキー/値格納用NSDictionaryを使用する必要があると言って

NSMutableDictionary *sports = [NSMutableDictionary dictionary]; 
[sports setObject:@"Foo" forKey:@"soccer"]; 
[sports setObject:@"Bar" forKey:@"basketball"]; 

NSString *sportString = @"soccer"; 
NSString *sportValue = [sports objectForKey:sportString]; 
NSLog(@"%@", sportValue); //logs "Foo" 
4

人は100%正しいです。

SEL selector2 = NSSelectorFromString(@"setFoo:"); 
[object performSelector:selector2 withObject:value]; 

SEL selector = NSSelectorFromString(@"foo"); // Or @selector(foo) if you know it at compile time 
id value = [object performSelector:selector]; 

あなたはまた、限り、彼らはオブジェクトを取るように、最大​​2つの引数を持つセレクタを使用することができます。しかし、私はそれはあなたが文字列で指定されたメッセージを呼び出すことができることを知っておくと便利だと思います

IMPやキャストobjc_msgSend()を使用して任意のメソッドを呼び出すことは可能ですが、実際の質問の範囲を超えています。 :-)

+0

ありがとうございます。間違いなくNSSelectorFromStringとperformSelectorについて知っておくと便利です。ほんとうにありがとう! – maxedison

関連する問題