当前位置 : 主页 > 手机开发 > 其它 >

swift3 – 在Swift 3中设置URL资源值

来源:互联网 收集:自由互联 发布时间:2021-06-11
我试图将Apple的 “ShapeEdit”示例转换为Swift 3,我无法理解对URL的setResourceValue的更改. Apple(Swift 2)示例包含以下代码: // Coordinate reading on the source path and writing on the destination path to copy.let
我试图将Apple的 “ShapeEdit”示例转换为Swift 3,我无法理解对URL的setResourceValue的更改.

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“跳转到定义”之外,我找不到任何文档

Sets the resource value identified by a given resource key.

This method writes the new resource values out to the backing store. Attempts to set a read-only resource property or to set a resource property not supported by the resource are ignored and are not considered errors. This method is currently applicable only to URLs for file system resources.

URLResourceValues keeps track of which of its properties have been set. Those values are the ones used by this function to
determine which properties to write.

public mutating func setResourceValues(_ values: URLResourceValues) throws

有没有人对setResourceValue(s)的变化有任何了解?

NSFileAccessIntent.URL的当前声明是

public var url: URL { get }

这是一个只读属性.

由于Swift 3 URL是一个结构,因此您不能对从getter返回的不可变值调用mutating方法.要修改URL,首先将其分配给var.

var url = intent.URL
url.setResourceValues(...)

然后从修改后的URL中创建一个新意图.

网友评论