Since OS X 10.10, il est possible que n'importe quel script AppleScript utilise Objective-C. Il existe plusieurs façons d'appeler des méthodes Objective-C à partir d'AppleScript, comme indiqué dans this translation guide. Un développeur Objective-C comme moi gravitent vers cette syntaxe, qui interpole les paramètres de la méthode avec leurs valeurs:
use framework "Foundation"
tell the current application's NSWorkspace's sharedWorkspace to openFile:"/Users/me/Desktop/filter.png" withApplication:"Preview"
Résultat:
true
+[NSString stringWithFormat:]
est une affaire délicate. Il prend comme premier paramètre une liste vararg, vous avez donc besoin d'un moyen de forcer à la fois la chaîne de format et ses arguments dans le même paramètre de méthode. Les résultats suivants dans une erreur, car AppleScript finit par passer un NSArray dans le paramètre qui attend, sur le plan conceptuel, un tableau C de NSStrings:
use framework "Foundation"
the current application's NSString's stringWithFormat:{"%lu documents", 8}
Résultat:
error "-[__NSArrayM length]: unrecognized selector sent to instance 0x7fd8d59f3bf0" number -10000
Au lieu de cela, vous devez utilisez une autre syntaxe qui ressemble plus à un appel de gestionnaire AppleScript qu'à un message Objective-C. Vous devez également exercer des pressions sur la valeur de retour (un objet NSString) dans un text
:
use framework "Foundation"
the current application's NSString's stringWithFormat_("%lu documents", 8) as text
Résultat:
"2087 documents"
La syntaxe « avec des paramètres » qui @nlanza mentionne des points au fait que AppleScript est en utilisant quelque chose de semblable à NSInvocation sous le capot. En Objective-C, NSInvocation vous permet d'envoyer un message à un objet, avec un tableau de valeurs de paramètres, sans nécessairement faire correspondre chaque valeur à un paramètre particulier. (Voir this article pour des exemples d'utilisation de NSInvocation directement.)
Bonne réponse. Merci. –