URLResourceValue和setResourceValues Swift 3

Dus*_*ant 8 nsurl ios swift3 ios10 xcode8

我试图找出如何使用Swift 3进行狐狸修复代码.

let paths = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true) as NSArray

for path in paths {
    let dir = path as! String
    print("the paths are \(path)")
    let urlToExclude = NSURL.fileURL(withPath: dir)
    do {

        try urlToExclude.setResourceValue(NSNumber(value: true), forKey: URLResourceKey.isExcludedFromBackupKey)

    } catch { print("failed to set resource value") }
}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是 这个

我使用上面的代码来排除备份到iCloud的文件,它曾经适用于以前版本的Swift,但在更新到Xcode 8之后,我只是卡住了.

我真的很感激任何帮助或建议.

OOP*_*Per 22

Xcode建议"使用struct URLResourceValues和URL.setResourceValues(_ :)代替"促使你写这样的东西:

let paths = NSSearchPathForDirectoriesInDomains(.libraryDirectory, .userDomainMask, true)

for dir in paths {
    print("the paths are \(dir)")
    var urlToExclude = URL(fileURLWithPath: dir)
    do {

        var resourceValues = URLResourceValues()
        resourceValues.isExcludedFromBackup = true
        try urlToExclude.setResourceValues(resourceValues)

    } catch { print("failed to set resource value") }
}
Run Code Online (Sandbox Code Playgroud)

请试试.

注意

请注意,文件URL必须是var - 如果是,则会出现奇怪的错误消息(请参阅注释).

  • 我发现了我的问题.我设置值的URL是"let",而不是"var",因此Swift编译器给了我一系列非常混乱的错误消息(取决于我尝试过的). (12认同)
  • 这对我来说在发布的Xcode 8中不起作用.它需要一个[URLResourceKey:AnyObject],但文档说它应该采用[URLResourceKey:Any].Xcode生成的接口文件显示它采用URLResourceValues.但是编译器不希望这样. (7认同)
  • @Rick我和你在这里有同样的问题.Xcode 8和swift 3是一个严重的问题. (4认同)

Jos*_*osh 11

除了TheEye提供的内容之外,请确保您的URL是var而不是let.

这就是在迁移到swift 3之后我的代码工作的原因.