使用Swift 3编写Bridge类

时间:2016-11-30 20:39:29

标签: swift syntax scripting-bridge

我正在尝试使用Swift实例化一个SB类,但它似乎不起作用:

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 但是我无法访问< em> init 方法。

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

1 个答案:

答案 0 :(得分: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提交重复的Radar门票,例如:这里有一个已经复制到OpenRadar的内容,如果你想按原样复制粘贴它(包括原始的rdar://以帮助Radar团队更快地解决它):openradar.appspot.com/29332915