NSArrayでお手軽に数値配列 その2
Objective-C で全うに配列を扱いたい場合、第一の候補として上がるのは、.plist を使用した外部ファイルの値を NSArray に読み込む方法だ。この方法については、前回やっているのでそちらの記事を参考にしてくださいまし。
同じく、プログラムソースコード内で配列をハードコーディングしてしまう方法についても触れてます。前回記事を書いた当時は、この@を使用したやり方についての日本語記事がほとんどなかったんだけど(だからわざわざ記事にしたという)、先日久しぶりに気になってググってみたら、この手法が各所で紹介されるようになってた。
やっぱり皆さんお手軽がいいよね。
で、本題。
アップルからSwiftなる言語が発表されたあたりからだと思うけど、配列の書き方でさらにお手軽な方法が使われ出したので、ご紹介。
書き方のスタイルからして、たぶん Swift からの技術的フィードバックの賜だとは思うけど。
NSArray *array = @[ @1, @2, @3, @4, @5 ];
・・・これだけだったりする。
いやその。我ながらここまでサボっていいのかなと思うけど。
もはや [NSArray alloc] だの arrayWith... すら書く必要なくなってしまいました。
そしてそして。そう、勘のいい人ならお気づきでしょう。
なんと、辞書も同様に書けてしまうんですね。
NSDictionary *dic = @{ @"key1":@1, @"key2":@2, @"key3":@3 };
・・・みたいな。
[と{の使い分けに注意。
なんというか、従来の低レベル言語にスクリプト言語が浸食を始めたというか。
いや、簡単になるのは歓迎なんだけどね。
ちなみにこの書き方、数値(即値)の部分は変数でも大丈夫なので、応用範囲が広いのですよ。
たとえば、UITableViewDelegate などのコールバック内で処理する「複数のindexPathを受け付ける」ような場所とか。
今までは、わざわざ NSArray でワンクッション入れる必要があった場所など、この書き方を利用すると、
- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; ...
みたいな感じでシンプルになりマス。
ほかにも、ツールバーに複数のボタンを配置するような場合とか、意外と応用範囲が広いんですね。
是非お試しあれ。