Since OS X 10.10,任何AppleScript腳本都可以使用Objective-C。在AppleScript中有幾種方法可以調用Objective-C方法,詳見this translation guide。像我這樣的一個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:]
是一個棘手的情況。它將可變參數列表作爲其第一個參數,因此您需要某種方式將格式字符串及其參數強制爲同一個方法參數。在一個錯誤的結果如下,因爲AppleScript的最終傳遞一個單一的NSArray成期望,概念上的參數,NSString的的C數組:
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提到指向一個事實,語法AppleScript的是在引擎蓋下使用類似NSInvocation的東西。在Objective-C中,NSInvocation允許您向對象發送消息以及參數值數組,而不必將每個值與特定參數進行匹配。 (有關直接使用NSInvocation的一些示例,請參閱this article)。
不幸的是,有些情況下需要腳本而不是應用程序,所以AppleScript Studio不是一個選項。 – 2008-09-15 21:22:24
AppleScript Studio現在已被棄用。 – 2010-05-09 16:05:59