我正在尝试确定目录上的所有颜色标签。 当我检查目录 URL 的 URLResourceValues 时,它似乎只返回“顶部”或最近的一个,但是一个目录可以有多个标签。
这是我用来从 URL 返回标签的 URL 扩展代码:
extension URL {
func hasFinderLabel() -> ColorLabel {
let folder = self
var rVals = URLResourceValues()
do {
rVals = try folder.resourceValues(forKeys: [.labelNumberKey, .labelColorKey])
} catch {}
if let colorLabels = rVals.labelColor {
print(colorLabels)
}
let colorNumber : Int = rVals.labelNumber ?? 0
var colorLabel : ColorLabel
switch colorNumber {
case 0:
colorLabel = .none
case 1:
colorLabel = .gray
case 2:
colorLabel = .green
case 3:
colorLabel = .purple
case 4:
colorLabel = .blue
case 5:
colorLabel = .yellow
case 6:
colorLabel = .red
case 7:
colorLabel = .orange
default:
colorLabel = .none
}
return colorLabel
}
}
enum ColorLabel : Int {
case none
case gray
case green
case purple
case blue
case yellow
case red
case orange
}
如果目录有多个颜色标签,则仅返回其中一个 - 最上面的一个。
您访问的资源值不正确。要将颜色应用于文件,您需要
tagNames
资源。这将返回一个 String
数组,其中包含颜色名称以及应用于文件的任何其他标签。
let rVals = try folder.resourceValues(forKeys: [.tagNamesKey])
if let tags = rVals.tagNames {
print(tags)
} else {
print("No tags")
}
tags
将包含 "Red"
、"Green"
等值,具体取决于应用于文件的颜色。颜色只是标签。