swift 如何确定多个查找器(颜色)标签

qybjjes1  于 9个月前  发布在  Swift
关注(0)|答案(1)|浏览(89)

我试图确定一个目录上的所有颜色标签。当我检查一个目录URL的URLResourceValues时,它似乎只返回“top”或最近的一个,但是一个目录可以有多个标签。
下面是我用来从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
}

字符串
如果一个目录有多个颜色标签,这只返回其中一个-最顶部的。

acruukt9

acruukt91#

您访问的资源值不正确。要获取应用于文件的颜色,您需要tagNames资源。这将返回一个String数组,其中包含颜色名称以及应用于文件的任何其他标记。

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

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

相关问题