NSDictionary
含まれているAppleScriptの先頭にキーと値のペアを追加する場合NSString
は、次の関数のようなものを使用できます。個人的にはNSStringのカテゴリとしてこれを行いますが、関数を要求しました。
NSString *addConstantsToAppleScript(NSString *script, NSDictionary *constants) {
NSMutableString *constantsScript = [NSMutableString string];
for(NSString *name in constants) {
[constantsScript appendFormat:@"set %@ to \"%@\"\n", name, [constants objectForKey:name]];
}
return [NSString stringWithFormat:@"%@%@", constantsScript, script];
}
この関数は、キーと値のペアを形式のAppleScriptステートメントに変換しますset <key> to "<value>"
。これらのステートメントは、指定されたscript
文字列の前に追加されます。結果のスクリプト文字列が返されます。
上記の関数は次のように使用します。
// Create a dictionary with two entries:
// myText = Hello\rWorld!
// Foo = Bar
NSDictionary *constants = [[NSDictionary alloc ] initWithObjectsAndKeys:@"Hello\rWorld!", @"myText", @"Bar", @"Foo", nil];
// The AppleScript to have the constants prepended to
NSString *script = @"tell application \"Finder\" to display dialog myText";
// Add the constants to the beginning of the script
NSString *sourceScript = addConstantsToAppleScript(script, constants);
// sourceScript now equals
// set Foo to "Bar"
// set myText to "Hello\rWorld!"
// tell application "Finder" to display dialog myText
NSAppleScript *appleScript = [[NSAppleScript alloc] initWithSource:sourceScript];