Я пытаюсь преобразовать пример Apple "ShapeEdit" в Swift 3, и я не могу разглядеть его в setResourceValue
.Установка значений ресурса URL в Swift 3
компании Apple (Swift 2) пример имеет следующий код:
// Coordinate reading on the source path and writing on the destination path to copy.
let readIntent = NSFileAccessIntent.readingIntentWithURL(templateURL, options: [])
let writeIntent = NSFileAccessIntent.writingIntentWithURL(target, options: .ForReplacing)
NSFileCoordinator().coordinateAccessWithIntents([readIntent, writeIntent], queue: self.coordinationQueue) { error in
if error != nil { return }
do {
try fileManager.copyItemAtURL(readIntent.URL, toURL: writeIntent.URL)
try writeIntent.URL.setResourceValue(true, forKey: NSURLHasHiddenExtensionKey)
NSOperationQueue.mainQueue().addOperationWithBlock {
self.openDocumentAtURL(writeIntent.URL)
}
} catch {
fatalError("Unexpected error during trivial file operations: \(error)")
}
}
setResourceValue(value: forKey:)
, кажется, были заменены setResourceValues()
, но я не могу установить его. То, что я до сих пор это:
let readIntent = NSFileAccessIntent.readingIntent(with: templateURL, options: [])
let writeIntent = NSFileAccessIntent.writingIntent(with: target, options: .forReplacing)
NSFileCoordinator().coordinate(with: [readIntent, writeIntent], queue: self.coordinationQueue) { error in
if error != nil { return }
do {
try fileManager.copyItem(at: readIntent.url, to: writeIntent.url)
var resourceValues: URLResourceValues = URLResourceValues.init()
resourceValues.hasHiddenExtension = true
// *** Error on next line ***
try writeIntent.url.setResourceValues(resourceValues)
// Cannot use mutating member on immutable value: 'url' is a get-only property
OperationQueue.main.addOperation {
self.openDocumentAtURL(writeIntent.URL)
}
} catch {
fatalError("Unexpected error during trivial file operations: \(error)")
}
}
Я не могу найти никаких документов, кроме «переход к определению» Xcode, который говорит
Устанавливает значение ресурса, идентифицированного с помощью данного ключа ресурса.
Этот метод записывает новые значения ресурсов в хранилище резервных копий. Попытки установить свойство ресурса только для чтения или установить свойство ресурса, не поддерживаемое ресурсом, игнорируются и не считаются ошибками. Этот метод в настоящее время применим только к URL-адресам для ресурсов файловой системы.
URLResourceValues
отслеживает, какие из его свойств были установлены. Эти значения используются теми, которые используются этой функцией, для определяют, какие свойства писать.
public mutating func setResourceValues(_ values: URLResourceValues) throws
Кто-нибудь есть понимание изменений в setResourceValue(s)
?
При изучении нового материала, предполагается, что у вас есть ошибка, а не в старых вещах! Вы почти правы, но 'intent.url' по-прежнему доступен только для чтения, поэтому ваша третья строка не работает. Но идея права - повторная инициализация намерения с измененным URL-адресом работает - 'intent = NSFileAccessIntent.writingIntent (с: url, options: .forReplacing)'. Вы хотите обновить ответ, или я должен? – Grimxn
Возможно, вместо этого разместите свой собственный ответ, и я удалю его :) – Sulthan
Нет, вы решили! – Grimxn