Как бы я написал следующий rb-appscript в objc-appscript?
-
21-09-2019 - |
Вопрос
Документация в 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?Прошу прощения, если это кажется чересчур простым вопросом, у меня нулевой опыт работы с Ruby.
Спасибо.
Решение
Если вы запустите скрипт ruby и используете ASTranslate
он должен перевести необработанные команды appscript в Objc-appscript.
Редактировать 01:
Я думаю, это будет выглядеть примерно так.Я не запускал инструмент для создания кода склеивания, поэтому я догадываюсь о том, как отображается название приложения.
#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.(Черт возьми, у меня должно быть немного времени для работы над 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".
Нет прямой корреляции с тем, как это сделать в Cocoa.К счастью для вас, Адресная книга доступна для написания сценариев, что означает, что вы можете использовать Фреймворк Скриптового моста взаимодействовать с ним из приложения Cocoa.
На этой странице есть действительно отличное объяснение того, как просто взаимодействовать с Mail.app через ScriptingBridge: http://robnapier.net/blog/scripting-bridge-265
Надеюсь, это даст вам достаточно информации, чтобы двигаться в правильном направлении.