OS X 10.10 以降、AppleScript スクリプトで Objective-C を使用できるようになりました。この翻訳ガイドで詳しく説明されているように、AppleScript 内から Objective-C メソッドを呼び出す方法はいくつかあります。私のような Objective-C 開発者は、メソッドのパラメーターをその値で補間する次の構文に引き寄せられます。
use framework "Foundation"
tell the current application's NSWorkspace's sharedWorkspace to openFile:"/Users/me/Desktop/filter.png" withApplication:"Preview"
結果:
true
+[NSString stringWithFormat:]
トリッキーなケースです。最初のパラメーターとして vararg リストを使用するため、書式文字列とその引数の両方を同じメソッド パラメーターに強制する何らかの方法が必要です。AppleScript は、概念的には NSString の C 配列を想定しているパラメーターに単一の NSArray を渡すことになるため、次の結果はエラーになります。
use framework "Foundation"
the current application's NSString's stringWithFormat:{"%lu documents", 8}
結果:
error "-[__NSArrayM length]: unrecognized selector sent to instance 0x7fd8d59f3bf0" number -10000
代わりに、Objective-C メッセージよりも AppleScript ハンドラ呼び出しに似た代替構文を使用する必要があります。また、戻り値 (NSString オブジェクト) を次のように強制する必要がありますtext
。
use framework "Foundation"
the current application's NSString's stringWithFormat_("%lu documents", 8) as text
結果:
"2087 documents"
@nlanza が言及している「with parameters」構文は、AppleScript が内部でNSInvocationに似たものを使用しているという事実を示しています。Objective-C では、NSInvocation を使用すると、各値を特定のパラメーターに必ずしも一致させることなく、パラメーター値の配列と共にメッセージをオブジェクトに送信できます。( NSInvocation を直接使用する例については、この記事を参照してください。)