有人可以解释什么是 URLResourceKeys 吗?

Can someone explain what URLResourceKeys are?

我正在查看 contentsOfDirectory(at:includingPropertiesForKeys:options:)

的文档

我特别关注论点 includingPropertiesForKeys,它说:

An array of keys that identify the file properties that you want pre-fetched for each item in the directory. For each returned URL, the specified properties are fetched and cached in the NSURL object. For a list of keys you can specify, see Common File System Resource Keys.

单击 URLResourceKey 将我带到有关它的 Apple 文档。

而且我想知道,如果我传入 fileResourceTypeKeyfileResourceIdentifierKeycreationDateKey 等键,我如何访问返回的 URL 列表中的那些(在调用 contentsOfDirectory(at:includingPropertiesForKeys:options:))?

而且我也对 URLResourceKey 枚举感到困惑 b/c 许多类型具有与其他键相似的描述和名称,例如:

比如这些键之间的区别是什么?

基本上我目前对文件系统的了解还很浅,所以请耐心等待我的 "simple" 问题。如果有人能解释所有这些键的含义以及我如何 access/use 它们,那就太好了!

首先URLResourceKey文档对属性信息的种类进行了很好的描述。例如 nameKey returns 总是 Desktop 对于 URL 表示 ~/DesktoplocalizedNameKey returns 本地化名称 Schreibtisch在德语系统上或 Bureau 在法语系统上。然而documentIdentifierKeyfileResourceIdentifierKey是完全不同的属性。


关于contentsOfDirectory(at:includingPropertiesForKeys:options:) API: includingPropertiesForKeys 参数中传递的键告诉框架在获取内容时预取相应的属性,出于性能原因。例如

let contentURLs = try fileManager.contentsOfDirectory(at: anURL, includingPropertiesForKeys: [.nameKey, .fileSizeKey], options: .skipsHiddenFiles)

要读取属性,请在 URL 上调用 resourceValues(forKeys,传递与 contentsOfDirectory 中相同的键。然后取resource key对应的属性的值。组合 URLResourceKey / URLResourceValues 的好处是您始终可以从文件属性中获得正确的类型。这避免了任何类型转换。

for fileURL in contentURLs {
     do {
        let fileAttributes = try fileURL.resourceValues(forKeys:[.nameKey, .fileSizeKey])
        print(fileAttributes.name!) // is String
        print(fileAttributes.fileSize!) // is Int
     } catch { print(error, fileURL) }
}