Hi Jan,

The Swift 3 URL struct has a modernized version of the NSURL API which works 
far better in Swift. This replaces “getResourceValue(…)” with the API you 
mentioned: “resourceValues(forKeys:)”.


Previously, in Swift 2, you had to use an separate value, use 
AutoreleasingUnsafeMutablePointers, conditionally cast and then hope you got 
the value, and that you used the correct typecast for the key you were asking 
for:

let url = NSURL(fileURLWithPath: "/Users/me/Desktop/File.png")
        
var fileType: AnyObject? = nil
do {
    try url.getResourceValue(&fileType, forKey: NSURLTypeIdentifierKey)
    
    if let type = fileType as? String {
        // Use the file type here
    } else {
        // Handle error
    }
} catch {
    // Handle error
}


In Swift 3 with the new Swift URL, the resourceValues(forKeys:) creates a 
struct with optional type safe properties representing each resource key type, 
and returns it, allowing you to use if let syntax:

let url = URL(fileURLWithPath: "/Users/me/Desktop/File.png")
if let resourceValues = try? url.resourceValues(forKeys: [.typeIdentifierKey]),
   let fileType = resourceValues.typeIdentifier {
       // Use the file type here
}


This is a much cleaner, clearer, and type-safe API.

If you want to use the old API, you can simply cast back to NSURL if you 
require the old behaviour. That said, the new one should serve all your needs 
and make things so much easier so I recommend you give it a go.

Hope this helps,

Rod




> On 6 Jan 2017, at 6:36 am, J.E. Schotsman via swift-users 
> <swift-users@swift.org> wrote:
> 
> Hello,
> 
> Is getResourceValue a method or URL or only on NSURL?
> After migrating a project to Swift 3 I have code like
> 
> var file:URL
> file.getResourceValue(...) // compiles!
> 
> From the documentation and the headers I get the impression that this should 
> not compile!
> 
> TIA,
> 
> Jan E.
> _______________________________________________
> swift-users mailing list
> swift-users@swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to