gpt4 book ai didi

swift - 获取选定的 Finder 文件

转载 作者:行者123 更新时间:2023-12-05 03:58:27 27 4
gpt4 key购买 nike

我从 Swift 开始,我想创建一个应用程序来在 Finder 中加载选定的文件并执行一些操作,例如在 AppleScript 中。

糟糕的是我找不到任何关于如何做的信息。

在 AppleScript 中实现的方法非常简单:

tell application "Finder" to set theFiles to selection

使用这段代码,我只需单击位于 Finder 工具栏上的应用程序,就可以毫不费力地选择文件。

是否有“Swift”方式?

提前致谢

最佳答案

使用 NSAppleScript 我可以获得一个可能的解决方案....

func getFromFinder()  -> String{  // Exucute Applescript and Get "Finder selection"

var scriptToPerform: NSAppleScript?

let myAppleScript = "tell application \"Finder\" \nactivate \nset theSelection to selection \nset theItems to {} \nrepeat with theItem in items of theSelection \nset theItem to POSIX path of (theItem as string) & \"\n\" \nset theItems to theItems & theItem \nend repeat \nreturn theItems as string \nend tell"

scriptToPerform = NSAppleScript(source:myAppleScript)

if let script = scriptToPerform {

var possibleError: NSDictionary?
let outputString = script.executeAndReturnError(&possibleError).stringValue

if let error = possibleError {
return "ERROR: \(error)"
} else {
if outputString != nil {
return outputString!
}
}
}

return ""
}

...但是经过大量测试后,NSAppleScript 选项通过从 Finder < 50 个文件中进行选择而运行良好,在文件数量 NSAppleScript 花费太长时间之后我无法逐一捕获以填充进度条。

NSOpenPanel 肯定是一个选项,但不是我想要的那样。

我要做的是制作“MenuBarApp”或从 Finder-Window-Menu 启动应用程序,然后从 Finder 窗口捕获要处理的选定文件。大多数情况下,它们是在 Finder 中执行搜索后找到的文件,是的,我知道我可以使用 NSOpenPanel 选项执行搜索,但事实并非如此。

...几个小时后,搜索和搜索我来到这个 https://github.com/Mortennn/FiScript并查看我得出以下代码:

FinderSync(框架)通过添加徽章、快捷菜单项和工具栏按钮来增强 Finder 的用户界面。
> FIFinderSyncControllerFIFinderSyncController 类充当 Finder Sync 扩展和 Finder 本身之间的桥梁。使用 Finder Sync Controller 配置您的扩展,在 Finder 窗口中的项目上设置徽章,并获取选定和目标项目的列表。
>> selectedItemURLs()返回所选项目的数组。

import FinderSync

let finderController = FIFinderSyncController.default()

guard let selectedItemsURL = finderController.selectedItemURLs() else {
return
}

...但我不能让它工作。它总是得到 nil

请给我一些线索

关于swift - 获取选定的 Finder 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57973062/

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