2016-11-30 7 views
3

Я пытаюсь создать экземпляр класса SB с помощью Swift, но это не похоже на работу:классы Scripting Bridge с Swift 3

if let messageClass = (mail as! SBApplication).class(forScriptingClass:"outgoing message") { 
     let message = (messageClass as! SBObject.Type).init(properties: ["subject": "message subjects"]) as MailOutgoingMessage 
     mail.outgoingMessages!().add(message) 
     print("Subject: \(message.subject)") 
     print("Outgoing messages: \(mail.outgoingMessages!().count)") 
    } 

Все я получаю в выходе:

Subject: nil 
Outgoing messages: 0 

Я знаю, что я должен бросить сообщение к MailOutgoingMessage.type и не SBObject.type, но я не мог получить доступ к инициализации иначе.

У кого-то есть опыт использования скриптового моста с Swift? Улики?

ответ

2

Scripting Bridge является противным, запутанным и сломанным. Если вам нужно использовать SB, Тони Ингралди написал helper tools для пользователей Swift. TBH, я рекомендую использовать AppleScript-ObjC через SB просто потому, что AppleScript по крайней мере работает.

Для местного моста Swift-AE см. SwiftAutomation. Я все еще работаю над документацией, но сам код происходит от appscript, который является единственной альтернативой AppleScript за последние 20 лет, которая на самом деле работает правильно, так что теперь просто бета-качество.

Пользователи Swift (и AppleScript), которые хотели бы видеть Apple, приняли SwiftAutomation в 10.3, настоятельно рекомендуется отправлять дубликаты билетов Radar на bugreport.apple.com, запрашивая его, например. вот один из них уже скопирован в OpenRadar, если вы хотите скопировать-вставить его как есть (включите оригинальный rdar: //, чтобы помочь команде Radar решить ее быстрее): openradar.appspot.com/29332915

+0

Спасибо. Я не знал о SwiftAutomation. Я уже использую инструментарий Tony Ingraldis, но я просто хотел понять синтаксис SB напрямую, потому что я все еще изучаю Swift. – altares