我学了一点 Python:足以构建一个简单的日历命令行应用程序。然而,我是 Swift 编程的新手,一个很大的症结是我不熟悉使用 Xcode。 Xcode 中如何处理文件?我们是否使用带有某些变量的相对路径,就像 Windows 中的 %WINDIR% 一样?我知道应用程序通常分布在称为捆绑包的特殊文件夹中,但我需要从编码的角度对环境进行某种入门。读到这里,你可以看出我很困惑。
为了使这一点不那么模糊,请在 Xcode 的命令行项目中考虑以下代码:
let Holidays: [String: (String?, Bool)] = [
"New Year's Day": ("art/NewYearsDay.png", true),
"Martin Luther King Jr. Day": ("art/MLKDay.png", true),
"2023-02-14": ("art/ValentinesDay.png", false),
"Labor Day": ("art/LaborDay.png", true),
"2023-10-31": ("art/Halloween.png", false),
"Thanksgiving": ("art/Thanksgiving.png", true),
"Christmas Day": ("art/ChristmasDay.png", true)
]
我不知道如何定义这些特定文件。我尝试将它们拖到 Xcode 项目中,但我不确定应该如何继续使代码在指向它们方面正确。
考虑下一个例子:
let filePath = "./output.pdf"
我知道在 Python 中,这表示相对于 main.py 文件位置的文件。然而,在 Swift 中,在 Mac OS 环境中,我从未见过如何在 Xcode 项目中正确指向文件的示例。我只是遇到了一点麻烦,因为在 Mac 操作系统上,这些东西通常非常模糊,以至于我没有任何正确的参考点。
我感谢任何愿意提供背景信息或为我指明正确方向的人。
这是一个有趣的问题,因为 Python、Ruby 和 JS 等“动态”语言的工作方式与 Swift、Java、C 等“编译”语言有很大不同。
使用 CPython 时,解释器执行主 Python 文件,然后请求解释器加载其他文件。这一切都发生在运行时,并且没有“编译”时间的概念。这些文件的位置很重要,因为解释器需要找到第一个文件,并且对其他源文件的相对引用需要正确。
更传统的编译语言(如 Swift)有很大不同。当您构建程序时,Swift 编译器会读取所有相关文件。它们可以存在于系统上的任何位置,并且不会对生成的可执行文件的行为产生任何影响。
文件路径的工作方式取决于您使用的 API。最常见的是,相对路径是相对于“当前工作目录”。
FileManager
是与文件系统交互的主要库。它有一堆 API,用于通过绝对或相对 URL 等写入/读取文件。
Mac 有许多不同的位置来放置文件,具体取决于用途。
FileManager
和 URL
都添加了帮助程序,用于生成满足各种需求的正确路径,而无需对它们进行硬编码。例如。对于用户下载文件夹中的文件,您可以使用:
let fm = FileManager.default
let fileURL = fm
.url(for: .downloadsDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
.appendingPathComponent("some/folder/abc.txt")
print(fileURL) // => "file:///Users/Alex/Downloads/some/folder/abc.txt"