gpt4 book ai didi

swift - 从 AppleScript 调用 Swift 方法

转载 作者:搜寻专家 更新时间:2023-11-01 07:17:54 25 4
gpt4 key购买 nike

我正在尝试编写一个调用我的 Swift 应用程序以获取值的 AppleScript。该方法接受一个字符串并需要返回另一个字符串。

这是我的 .SDF 文件:

<suite name="My Suite" code="MySU" description="My AppleScript suite.">
<class name="application" code="capp" description="An application's top level scripting object.">
<cocoa class="NSApplication"/>
<element type="my types" access="r">
<cocoa key="types"/>
</element>
</class>

<command name="my command" code="MyCOMMND" description="My Command">
<parameter name="with" code="MyPR" description="my Parameter" type="text">
<cocoa key="myParameter"/>
</parameter>
<result type="text" description="the return value"/>

<cocoa method="myCommand:"/>
</command>
</suite>

相应的 Swift 代码相当简单:

func myCommand(_ command: NSScriptCommand) -> String
{
if let myParameter = command.evaluatedArguments?["myParameter"] as? String
{
return "Hello World!"
}
else
{
return "Nothing happening here. Move on."
}
}

我的 AppleScript 终于来了:

tell application "MyApp"
set r to my command with "Hello"
end tell

当我执行 AppleScript 时,它会识别我的命令,但不会调用我试图与之关联的 Swift 代码。 Xcode 或 AppleScript 均未报告问题。我是不是遗漏了什么或把我的代码放在了错误的地方?

最佳答案

对于这种类型的脚本,我建议使用命令优先(也称为动词优先)方法,而不是您正在尝试的对象优先方法。您的 sdef 将如下所示(将“MyProject”替换为您的项目名称,即您的应用程序的 Swift 模块名称):

<dictionary xmlns:xi="http://www.w3.org/2003/XInclude">
<suite name="My Suite" code="MySU" description="My AppleScript suite.">

<command name="my command" code="MySUCMND" description="My Command">
<cocoa class="MyProject.MyCommand"/>
<parameter name="with" code="MyPR" description="my Parameter" type="text">
<cocoa key="myParameter"/>
</parameter>
<result type="text" description="the return value"/>
</command>

</suite>
</dictionary>

MyCommand 类应该如下所示:

class MyCommand : NSScriptCommand {

override func performDefaultImplementation() -> Any? {
if let _ = self.evaluatedArguments?["myParameter"] as? String
{
return "Hello World!"
}
else
{
return "Nothing happening here. Move on."
}

}
}

“ModuleName.ClassName”sdef 提示来自 Swift NSScriptCommand performDefaultImplementation

关于swift - 从 AppleScript 调用 Swift 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40957660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com