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 とかでも良いレベルのフィルタですね。

実行例

"赤": 0xFF0000, "緑": 0x00FF00, "青": 0x0000FF,

  • コマンド

% php convJS2ObjcDict.php tmp2.txt

air$ php convJS2ObjcDict.php tmp2.txt
[NSNumber numberWithInteger:0xFF], @"赤",
[NSNumber numberWithInteger:0x00], @"緑",
[NSNumber numberWithInteger:0x00], @"青",

もっと良い方法知ってる人教えて下さい。 (`・ω・´)

STHelper

こちらのライブラリを利用すると、もっとすっきり書けるかもしれません。まだ試してないけど。

オチ