使用NSURL
API,我如何确定目录中设置了哪些标签?我所知道的唯一API确实确实返回了与标签关联的数字,但是我不确定如何从返回的值中提取特定标签。
例如,这将为目录4
返回B
。我需要确定同时设置了Blue
和Green
标签。
let url = URL(fileURLWithPath: "/Users/Username/Desktop/Test/B")
let resourceValues = try! url.resourceValues(forKeys:
[URLResourceKey.labelNumberKey])
print(resourceValues.labelNumber!) // 4
我已经看到有人使用enum
将结果映射回Swift,但这似乎无法处理多个标签。
enum LabelColor: Int {
case none
case gray
case green
case purple
case blue
case yellow
case red
case orange
}
因此看来OptionSet
将是Swift的最佳实现。
如果有人能指出我要从总数中提取标签的算法,那就太好了!
答案 0 :(得分:0)
除了 through a shell 之外,我不知道有什么方法可以将数值抓取到标签中。
但是,您可以按照@Martin-R 的建议,获取附加到文件的标签数组。我认为这是最好的,因为用户可以创建自定义标签,这可能很难用数字识别。
我建议使用 ⤵︎ 获取数组
var itemTags: [String] = []
do {
let resources = try url.resourceValues(forKeys: [.tagNamesKey])
if let tags = resources.tagNames {
itemTags = tags // ["Green", "Red"]
}
} catch {}
一旦你有了数组,你就可以使用某种 enum & switch、for 循环或 if/else 来匹配你自己指定的颜色。
现在的问题是,如果您在沙盒中尝试此操作,您可能只会获得我想象的一个标签。它将是最前面的标签。
这只是 Apple 的另一项安全措施。 要解决此问题,您的沙箱需要扩展到此资源。
这篇博文中涉及安全范围的内容有点多,但您可以尝试以下两件事。
使用 NSOpenPanel()
获取 url 或父目录 url。这将自动为您授予该会话的该资源的权限。您可以为它添加书签、解决它,and start accessing it。
停止使用沙箱
不幸的是,我不知道其他可行的解决方案。我选择了第一个,目前它是最不痛苦的。