Есть ли способ читать/записывать теги файлов без команд оболочки? Уже пробовал NSFileManager
и CGImageSource
классы. Пока не повезло.
Чтение и запись тега файла в приложении какао OS X с помощью swift или obj-c
Ответы (2)
Объект NSURL
имеет ресурс для ключа NSURLTagNamesKey
. Значение представляет собой массив строк.
Этот пример Swift читает теги, добавляет тег Foo
и записывает теги обратно.
let url = NSURL(fileURLWithPath: "/Path/to/file.ext")
var resource : AnyObject?
do {
try url.getResourceValue(&resource, forKey: NSURLTagNamesKey)
var tags : [String]
if resource == nil {
tags = [String]()
} else {
tags = resource as! [String]
}
print(tags)
tags += ["Foo"]
try url.setResourceValue(tags, forKey: NSURLTagNamesKey)
} catch let error as NSError {
print(error)
}
Версия Swift 3+ немного отличается. В URL
свойство tagNames
доступно только для чтения, поэтому необходимо выполнить мостовое приведение URL
к Foundation NSURL
.
var url = URL(fileURLWithPath: "/Path/to/file.ext")
do {
let resourceValues = try url.resourceValues(forKeys: [.tagNamesKey])
var tags : [String]
if let tagNames = resourceValues.tagNames {
tags = tagNames
} else {
tags = [String]()
}
tags += ["Foo"]
try (url as NSURL).setResourceValue(tags, forKey: .tagNamesKey)
} catch {
print(error)
}
person
vadian
schedule
28.07.2016
Большой! вы очень помогли. Спасибо.
- person arsena; 28.07.2016
И снова здравствуйте. Есть ли способ удалить существующий тег? например, removeResourceValue или что-то в этом роде?
- person arsena; 01.09.2016
Используйте
setResourceValue
с пустым массивом или если вы хотите, чтобы другие удаляли значение из массива и записывали его обратно.
- person vadian; 01.09.2016
Ответ @vadian в Swift 4.0
('NSURLTagNamesKey' has been renamed to 'URLResourceKey.tagNamesKey'
)
let url = NSURL(fileURLWithPath: "/Path/to/file.ext")
var resource : AnyObject?
do {
try url.getResourceValue(&resource, forKey: URLResourceKey.tagNamesKey)
var tags : [String]
if resource == nil {
tags = [String]()
} else {
tags = resource as! [String]
}
print(tags)
tags += ["Foo"]
try url.setResourceValue(tags, forKey: URLResourceKey.tagNamesKey)
} catch let error as NSError {
print(error)
}
person
leanne
schedule
16.11.2017