Вопрос

Документация в 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

Надеюсь, это даст вам достаточно информации, чтобы двигаться в правильном направлении.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top