2009-07-14 12 views
1

私はJavaのバックグラウンドから来たので、Obj-Cでいくつかのやり方を把握しています。Objective-Cスイッチは文字列の内容を定義します

提供されている数値によっては、NSString変数の内容が異なる必要があります。

Javaでは、私はこのような何かをするだろう:

string foo; 
switch (numberToSwtich){ 

    case 1: 
     foo = "Something!"; 
     break; 
    case 2: 
     foo = "Something Else!"; 
     break; 
} 

は明らかにObjective-Cの中の文字列の2種類があります。 NSStringとNSSMutableString。

違いは、後で変更できる点です。しかし、Javaのように、最初にNSStringを初期化してから、その内容を後で設定することができますか、NSMutableStringを使用する必要がありますか?

ビットこのような何か...

NSString *aString = [[NSString alloc] init]; 

switch ([self getNumberOfSides]) { 
    case 1: 
     aString = @"A String"; 
     break; 
    case 2: 
     aString = @"Another String"; 
     break; 
} 

私は、例えば数字キーとNSDictionaryのを使用するなど、これを行うの他の-方法は、ある認識してんだけど、私が使用したいですスイッチ。

ありがとうございました。

答えて

1

あなたのコードは完全に有効です。 NSMutableStringを使う必要はありません。

を使用して割り当てた空の文字列を解放していないため、コードにリークメモリがあります。空の文字列には「文字列」クラスメソッドを使用する方が良いでしょう。

NSString *aString; 

switch ([self getNumberOfSides]) { 
     case 1: 
       aString = @"A String"; 
       break; 
     case 2: 
       aString = @"Another String"; 
       break; 
     default: 
       aString = [NSString string]; 
       break; 
} 
+0

ありがとうございます。なぜ私はそれがうまくいくとは思わなかったのか分かりません。それはかなり論理的です。私が頭の中で奇妙に思っているこの大括弧の土地でなければなりません! – JonB

+1

[NSString string]の使用には本当の必要性や目的はありません - 単に@ ""を使用してください。 "string"ファクトリメソッドは一貫性のためにそこにあり、便利である可変バージョン([NSMutableString string])で使用するためにそこにあります。 –

+1

一般的な良い習慣として、NSString * aString = nilと言ってもお勧めします。それはいつも良いことです。 – jbrennan

関連する問題