2016-11-30 78 views
3

我试图使用实例化一个斯威夫特SB类,但它似乎不工作:脚本桥接班,斯威夫特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但我无法访问init方法,否则。

有人使用Swift使用Scripting Bridge的经验?线索?

回答

2

脚本桥是讨厌的,模糊的和破碎的。如果你不得不使用SB,Tony Ingraldi为Swift用户写了一些helper tools。 TBH,我推荐使用AppleScript-ObjC而不是SB,因为AppleScript至少可以工作。

对于本地Swift-AE桥,请参阅SwiftAutomation。我仍在编写文档,但代码本身是从appscript下载的,这是过去20年中唯一实际正确运行的AppleScript替代方案,现在只是beta版质量。

希望看到Apple采用10.3中的SwiftAutomation的Swift(和AppleScript)用户强烈建议向Bugreport.apple.com提交重复的雷达票,例如请求它。这里有一个已经复制到OpenRadar,如果你想复制粘贴它(包括原始rdar://帮助雷达团队更快地解决它):openradar.appspot.com/29332915

+0

谢谢。我不知道SwiftAutomation。我已经在使用Tony Ingraldis的工具箱,但我只是想直接理解SB语法,因为我仍然在学习Swift。 – altares