久々に Mac で JavaScript(JXA) を。
JavaScript 文字列と NSString の相互変換が今まで解らなかった。
公式の解説にて $() だけで NSString に変換できるのは理解。
でも逆がドコにも書いていないんですけど。
散々探してやっと以下を見つける。
Home ? dtinth/JXA-Cookbook Wiki ? GitHub
Shell and CLI Interactions ? dtinth/JXA-Cookbook Wiki ? GitHub
んと、ObjC.unwrap で NSArray を JavaScript 形式に変換できるのか。
ならば NSString もイケるかな?と適当にやったら出来ちゃった。
ということで JXA, NSString 関連の覚書。
ObjC.import("Cocoa"); console.log("日本語も大丈夫"); $.NSLog("%@ %@", $("NSString"), $("はこうする")); var jsStr = "変数も $() で変換できる\n"; var nsStr = $(jsStr); $.NSLog("%@", nsStr); nsStr = $("NS* から JavaScript 形式へは ObjC.unwrap()"); jsStr = ObjC.unwrap(nsStr); console.log(jsStr); var saveStr = "保存します\n"; saveStr += "戻り値が表示されるので変数に入れています\n"; var data = $(saveStr).dataUsingEncoding($.NSUTF8StringEncoding); var res = data.writeToFileAtomically("output.txt", true); if (res) { var terminal = Application("Terminal"); var fm = $.NSFileManager.defaultManager; var cwd = fm.currentDirectoryPath; var nil = terminal.doScript("cat " + ObjC.unwrap(cwd) + "/output.txt"); }
よし日本語もこれでバッチリ(死語)
Cookbook は他にも色々試したいコードが沢山あって素晴らしい。
しかし Cookbook も var とセミコロンを全部書いているんだね。
JXA では不要と言われても無いとキモいのは皆同じようである。