Как бы я написал следующий rb-appscript в objc-appscript?
Документация в appScript objc-trunk случайным образом использует ruby в разделе "Проблемы с производительностью".
require "appscript"
include Appscript
desiredEmail = 'sam.brown@foo.com'
p app('Address Book').people[
its.emails.value.contains(desiredEmail)
].name.get
Как бы это было написано в Objective-C? Я прошу прощения, если это кажется слишком основным вопросом, у меня 0 опыта работы с Ruby.
Благодарю.
3 ответа
Если вы запускаете скрипт ruby и используете ASTranslate
он должен перевести необработанные команды appscript в Objc-appscript.
Edit01:
Я думаю, что это будет выглядеть примерно так. Я не запустил инструмент, чтобы сделать клейкий код, поэтому я догадываюсь, как отображается имя приложения.
#import "AddressBookGlue.h" //Dont know the precise name
AddressBookApplication *abApp=[[AddressBookApplication alloc] initWithName: @"Address Book.app"];
NSString *desiredEmail=@"sam.brown@foo.com"
NSString *returnedName= [[[[[[abApp people] emails] value] contains:desiredEmail] name] get];
По сути, он следует тем же правилам, которые Objectic-c использует при преобразовании из синтаксиса точек: везде, где есть точка в исходном синтаксисе, ожидайте скобку в Objective-C.
Я мог бы добавить, что, если вы собираетесь делать много сценариев этого типа, было бы лучше потратить день или два на изучение основ ruby или python. Намного проще работать с OSA в точечном синтаксисе, чем во вложенном. Просто глядя на все эти скобки в документации для Objc-appscript заставляет мои глаза слезиться.
Извините за неполноту руководства objc-appscript, которое изначально было портировано из rb-appscript, как вы можете сказать. (FWIW, у меня должно быть время поработать над appscript этой весной.)
Перевод кода Ruby обратно в AppleScript в первую очередь, вероятно, самый простой подход:
tell application "Address Book"
get name of every person where value of its email contains "hengist.podd@virgin.net"
end tell
Запуск через ASTranslate дает это:
#import "ABGlue/ABGlue.h"
ABApplication *addressBook = [ABApplication applicationWithName: @"Address Book"];
ABReference *ref = [[[addressBook people] byTest: [[[ABIts emails] value] contains: @"hengist.podd@virgin.net"]] name];
id result = [ref getItem];
Из того, что я понимаю, это печать имени каждого человека, у которого есть электронная почта "sam.brown@foo.com".
Там нет прямой корреляции для того, как это сделать в какао. К счастью для вас, адресная книга является сценарием, что означает, что вы можете использовать инфраструктуру Scripting Bridge для взаимодействия с ней из приложения Какао.
На этой странице есть отличное объяснение того, как просто взаимодействовать с Mail.app через ScriptingBridge: http://robnapier.net/blog/scripting-bridge-265
Надеюсь, это даст вам достаточно информации, чтобы двигаться в правильном направлении.