今回のエンジニアブログ担当の山下です。
先日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"]; */
ソースコード中にアットマークがやたら増えますが、
覚えておけばコーディングのスピードが向上します。
メソッド名の長さにうんざりしていた方は
新しいリテラル表記を使って作業効率を上げてみてはいかがでしょうか。