如何从Swift运行JXA?

时间:2017-05-26 19:41:31

标签: swift jxa

如果我有一个带有JXA源代码的字符串变量,有没有办法从swift运行它?似乎NSAppleScript仅适用于AppleScript源。

2 个答案:

答案 0 :(得分:0)

以下是一个示例,说明如何使用Swift中的OSAKit运行存储在字符串中的JavaScript for Automation脚本:

import OSAKit
let scriptString = "Math.PI";
let script = OSAScript.init(source: scriptString, language: OSALanguage.init(forName: "JavaScript"));
var compileError : NSDictionary?
script.compileAndReturnError(&compileError)
if let compileError = compileError {
    print(compileError);
    return;
}
var scriptError : NSDictionary?
let result = script.executeAndReturnError(&scriptError)
if let scriptError = scriptError {
    print(scriptError);
}
else if let result = result?.stringValue {
    print(result)
}

此Swift代码改编自the Hammerspoon source code (Objective-C).

答案 1 :(得分:-3)

为什么呢? JXA在各方面都是一只狗。如果您只想运行JS代码,那么JavaScriptCore Obj-C API更简洁,更容易。如果你想控制" AppleScriptable"应用程序然后使用AppleScript - 它是唯一正常支持的†选项,它正常工作。

(†有SwiftAutomation,但苹果没有被咬过,而且由于Apple长期以来对Mac Automation的管理不善,我自己并不倾向于支持它。我们会看到发生了什么WWDC17。)