Seit OS X 10.10 war es für jedes AppleScript-Skript möglich, Objective-C zu verwenden. Es gibt ein paar Möglichkeiten, Objective-C-Methoden aus AppleScript heraus aufzurufen, wie in diese Übersetzungshilfe . Ein Objective-C-Entwickler wie ich würde zu dieser Syntax tendieren, die die Parameter der Methode mit ihren Werten interpoliert:
use framework "Foundation"
tell the current application's NSWorkspace's sharedWorkspace to openFile:"/Users/me/Desktop/filter.png" withApplication:"Preview"
Ergebnis:
true
+[NSString stringWithFormat:]
ist ein kniffliger Fall. Sie nimmt eine vararg-Liste als ersten Parameter an, so dass Sie eine Möglichkeit benötigen, sowohl die Formatzeichenkette als auch ihre Argumente in denselben Methodenparameter zu zwingen. Das Folgende führt zu einem Fehler, weil AppleScript am Ende ein einzelnes NSArray in den Parameter übergibt, der konzeptionell ein C-Array von NSStrings erwartet:
use framework "Foundation"
the current application's NSString's stringWithFormat:{"%lu documents", 8}
Ergebnis:
error "-[__NSArrayM length]: unrecognized selector sent to instance 0x7fd8d59f3bf0" number -10000
Stattdessen müssen Sie eine alternative Syntax verwenden, die eher wie ein AppleScript-Handler-Aufruf als eine Objective-C-Nachricht aussieht. Außerdem müssen Sie den Rückgabewert (ein NSString-Objekt) in eine text
:
use framework "Foundation"
the current application's NSString's stringWithFormat_("%lu documents", 8) as text
Ergebnis:
"2087 documents"
Die von @nlanza erwähnte Syntax "mit Parametern" deutet darauf hin, dass AppleScript etwas verwendet, das mit NSInvocation unter der Haube. In Objective-C können Sie mit NSInvocation eine Nachricht zusammen mit einem Array von Parameterwerten an ein Objekt senden, ohne dass jeder Wert unbedingt mit einem bestimmten Parameter übereinstimmen muss. (Siehe dieser Artikel für einige Beispiele zur direkten Verwendung von NSInvocation).