xcode 如何在MacOS上使用Swift在Finder中检查文件是否有红色标签?

yzuktlbb  于 2023-05-30  发布在  Mac
关注(0)|答案(1)|浏览(221)

我正在为MacOS创建我的第一个项目。我必须处理文件夹中的文件。我的目标是检查这些文件,并通过Finder查看哪些元素应用了红色标签。我简直要疯了,因为代码无法识别带有红色标签的图像。
这是我写的函数。

func isFileTaggedRed(at fileURL: URL) -> Bool {
        do {
            let resourceValues = try fileURL.resourceValues(forKeys: [.labelColorKey])
            if let labelColor = resourceValues.labelColor, labelColor == .red {
                return true
            }
        } catch {
            print("Error retrieving resource values for file: \(error)")
        }
        
        return false
    }

这是ViewController中的代码

for imageUrl in imageUrls {
            if isFileTaggedRed(at: imageUrl) {
                print("Skipping red tagged image: \(imageUrl.lastPathComponent)")
                continue
            }else{
                print("not tagged")
            }
        }

file info

eqoofvh9

eqoofvh91#

我以前没有用过labelColorKey。看起来你得到的labelColor是一个NSColor。在像MacOS这样的颜色管理系统中,颜色是棘手的。颜色可能是红色,但不是你想要的颜色。我建议使用NSColor.getRed(_:green:blue:alpha:)记录返回颜色的RGB值。你可能会得到一个接近但不完全等于.red的颜色。
您可能需要添加代码来检查RGB值是否在.red的“摆动空间”范围内(例如每个分量都在目标颜色的.01范围内)。

编辑:

我刚刚尝试了一下,当我向文件添加红色标签时,得到的NSColor记录为NSCalibratedRGBColorSpace 0.980484 0.382818 0.347662 1
这将看起来是红色的,但不是完全饱和的红色。
请注意,NSColor.red记录为sRGB IEC61966-2.1 colorspace 1 0 0 1(100%红色,没有绿色或蓝色)。
此外,当我看一个带有红色标签的文件时,它看起来确实像一个稍微被洗掉的红色,而不是纯红色。

编辑#2:

我使用的代码(在命令行工具中)如下:

func fileColor(at fileURL: URL) -> NSColor? {
       do {
           let resourceValues = try fileURL.resourceValues(forKeys: [.labelColorKey])
           if let labelColor = resourceValues.labelColor {
               return labelColor
           }
       } catch {
           print("Error retrieving resource values for file: \(error)")
           return nil
       }
       
       return nil
   }

let path = "~/Documents/RedFile.rtf"
let fixedPath = NSString(string:path).expandingTildeInPath
let fileURL = URL(filePath: fixedPath)

if let fileColor = fileColor(at: fileURL) {
    print("File color returned is \(fileColor)")
} else {
    print("Could not load file.")
}

相关问题