我正在查看contentsOfDirectory(at:includingPropertiesForKeys:options:)
特别是我一直专注于论据includingPropertiesForKeys
,其中说:
一组键,用于标识要为目录中的每个项目预取的文件属性。对于每个返回的URL,将在NSURL对象中提取和缓存指定的属性。有关您可以指定的密钥列表,请参阅通用文件系统资源密钥。
点击URLResourceKey向我发送了关于它的Apple文档。
我想知道,如果我传递了fileResourceTypeKey
,fileResourceIdentifierKey
和creationDateKey
这样的密钥,我怎样才能访问返回的网址列表中的密钥(在调用contentsOfDirectory(at:includingPropertiesForKeys:options:)
之后)?
我也对URLResourceKey
enum b / c感到困惑,很多类型都有与其他键类似的描述和名称,如:
documentIdentifierKey
vs fileResourceIdentifierKey
vs localizedNameKey
vs nameKey
localizedTypeDescriptionKey
vs fileResourceTypeKey
vs typeIdentifierKey
contentsOfDirectory(at:includingPropertiesForKeys:options:)
vs pathKey
这些键之间的区别是什么?
基本上我对文件系统的了解非常少,所以请耐心等待我的#34;简单"的问题。如果有人可以解释所有这些键的含义以及我如何访问/使用它们会很棒!
答案 0 :(得分:2)
首先,here文档很好地描述了属性信息的类型。例如,对于代表Desktop
的网址,~/Desktop
始终返回localizedNameKey
,而Schreibtisch
则返回德语系统上的本地化名称Bureau
或documentIdentifierKey
上的fileResourceIdentifierKey
法国制度。但是,contentsOfDirectory(at:includingPropertiesForKeys:options:)
和includingPropertiesForKeys
属于完全不同的属性。
关于let contentURLs = try fileManager.contentsOfDirectory(at: anURL, includingPropertiesForKeys: [.nameKey, .fileSizeKey], options: .skipsHiddenFiles)
API:resourceValues(forKeys
参数中传递的密钥告诉框架在获取内容时预先获取相应的属性,这是出于性能原因。例如
contentsOfDirectory
要读取传递与URLResourceKey / URLResourceValues
中相同键的URL上的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) }
}
属性。然后使用资源键的相应属性获取值。组合{{1}}的好处是您始终可以从文件属性中获取正确的类型。这可以避免任何类型的转换。
{{1}}