如何确定多个取景器(颜色)标签

问题描述 投票:0回答:1

我正在尝试确定目录上的所有颜色标签。 当我检查目录 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
}

如果目录有多个颜色标签,则仅返回其中一个 - 最上面的一个。

swift appkit
1个回答
0
投票

您访问的资源值不正确。要将颜色应用于文件,您需要

tagNames
资源。这将返回一个
String
数组,其中包含颜色名称以及应用于文件的任何其他标签。

let rVals = try folder.resourceValues(forKeys: [.tagNamesKey])
if let tags = rVals.tagNames {
    print(tags)
} else {
    print("No tags")
}

tags
将包含
"Red"
"Green"
等值,具体取决于应用于文件的颜色。颜色只是标签。

© www.soinside.com 2019 - 2024. All rights reserved.