Начиная с OS X 10.10 , любой сценарий AppleScript мог использовать Objective-C. Существует несколько способов вызова методов Objective-C из AppleScript, как подробно описано в этого руководства по переводу . Такой разработчик 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 в конечном итоге передает единственный NSArray в параметр, который концептуально ожидает массив C из NSStrings:
use framework "Foundation"
the current application's NSString's stringWithFormat:{"%lu documents", 8}
Результат:
error "-[__NSArrayM length]: unrecognized selector sent to instance 0x7fd8d59f3bf0" number -10000
Вместо этого вы должны использовать альтернативный синтаксис, который больше похож на вызов обработчика AppleScript, чем на сообщение Objective-C. Вам также необходимо привести возвращаемое значение (объект NSString) в text
:
use framework "Foundation"
the current application's NSString's stringWithFormat_("%lu documents", 8) as text
Результат:
"2087 documents"
Синтаксис «с параметрами», который упоминает @nlanza, указывает на тот факт, что AppleScript использует нечто вроде NSInvocation под капотом. В Objective-C NSInvocation позволяет отправлять сообщение объекту вместе с массивом значений параметров, не обязательно сопоставляя каждое значение определенному параметру. (См. эту статью , где приведены некоторые примеры использования NSInvocation напрямую.)