WonderPlanet DEVELOPER BLOG

ワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。

Modern Objective-Cのリテラル表記

今回のエンジニアブログ担当の山下です。

先日iOS 7が発表されました。
iPhoneが発表されてから最も大きな変化を遂げたと豪語されていましたが、
デザインが一新され非常に平面的でシンプルになり、
コントロールセンターやAirDropなど、興味深い要素が満載です。
正式リリースが待ち遠しいですね。

リリースの度に大きく変化を遂げているiOSですが、
変化しているのは実はOSだけではありません。
Objective-Cの言語仕様も少しずつですが進化しています。
今回は、Objective-Cの新しいリテラル表記についてまとめてみました。

NSNumberのリテラル表記

NSNumber型のオブジェクトを生成するには、今まではこのように記述していました。

NSNumber *num = [NSNumber numberWithInt:100];  

これが新しいリテラル表記を使うとこう書くことができます。

NSNumber *num = @100;  

非常に短く書くことができました。
NSNumber型の新しいリテラル表記はほかにもまだまだあります。

// unsigned int  
NSNumber *numUInt = @123U;  
// NSNumber *numUInt = [NSNumber numberWithUnsignedInt:123U]; と等価  
  
// long  
NSNumber *numLong = @123L;  
// NSNumber *numLong = [NSNumber numberWithLong:123L]; と等価  
  
// long long  
NSNumber *numLongLong = @123LL;  
// NSNumber *numLongLong = [NSNumber numberWithLongLong:123LL]; と等価  

実数型や論理型にも適用できます。

// float  
NSNumber *numFloat = @1.23F;  
// NSNumber *numFloat = [NSNumber numberWithFloat:1.23F]; と等価  
  
// double  
NSNumber *numFloat = @1.23;  
// NSNumber *numDouble = [NSNumber numberWithDouble:1.23]; と等価  
  
// BOOL  
NSNumber *numYes = @YES;  
// NSNumber *numYes = [NSNumber numberWithBool:YES]; と等価  

NSArray, NSDictionaryのリテラル表記

配列や連想配列にも新しい表記方法が増えました。

// 配列、連想配列の定義  
NSArray *array = @[ @"A", @"B", @"C" ];  
NSDictionary *dictionary = @{ @"key1" : @"value1", @"key2" : @"value2" };  
  
/*  
// 以下と等価  
NSArray *array = [NSArray arrayWithObjects: @"A", @"B", @"C", nil];  
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:  
@"value1", @"key1", @"value2", @"key2", nil];  
*/  
  
// 参照  
NSString *str1 = array[0];  
NSString *str2 = dictionary[@"key1"];  
  
/*  
// 以下と等価  
NSString *str1 = [array objectAtIndex:0];  
NSString *str2 = [dictionary objectForKey:@"key1"];  
*/  

ソースコード中にアットマークがやたら増えますが、
覚えておけばコーディングのスピードが向上します。
Objective-Cメソッド名の長さにうんざりしていた方は
新しいリテラル表記を使って作業効率を上げてみてはいかがでしょうか。