JavaScript の連想配列を Objective-C の NSDirectory 形式に
最近、iOS アプリのプログラミングにハマっていまして、JavaScript の連想配列マップ(文字列=>コード)を Objective-C でも使うとすると、 数字を NSNumber にくるんで NSDirectory を使うのを真っ先に思いつく訳ですが、手動でコードを書き換えるのが面倒なので、PHP スクリプトでやりました。多分何度も使ったり改善したくなると思うのでメモ。
変換プログラム
すみません。PHP しか書けないもので。
- convJS2ObjcDict.php
<?php foreach (file($argv[1]) as $line) { preg_match_all('/"([^"]+)":.*?([0-9A-Fx]+)/u', $line, $matches); foreach ($matches[1] as $idx => $key) { $obj = $matches[2][$idx]; echo "[NSNumber numberWithInteger:$obj], @\"$key\",\n"; } }
はい。sed とかでも良いレベルのフィルタですね。
実行例
- 変換前 (JavaScript の連想配列)
"赤": 0xFF0000, "緑": 0x00FF00, "青": 0x0000FF,
- コマンド
- 変換後 (Objective-C の NSDirectory)
air$ php convJS2ObjcDict.php tmp2.txt
[NSNumber numberWithInteger:0xFF], @"赤",
[NSNumber numberWithInteger:0x00], @"緑",
[NSNumber numberWithInteger:0x00], @"青",
もっと良い方法知ってる人教えて下さい。 (`・ω・´)!
STHelper
こちらのライブラリを利用すると、もっとすっきり書けるかもしれません。まだ試してないけど。