NSURL getResourceValue in swift

前端 未结 5 862
梦如初夏
梦如初夏 2021-02-13 11:54

Having trouble figuring out how to make the following call in swift:

var anyError: NSError? = nil
var rsrc: NSNumber? = nil
var success = url.getResourceValue(&a         


        
相关标签:
5条回答
  • 2021-02-13 11:59

    Here's a concrete example as an extension of the URL type:

    extension URL {
        var creationDate : Date {
            let url = self as NSURL
            var value : AnyObject?
            try? url.getResourceValue(&value, forKey: .creationDateKey)
            if let date = value as? Date {
                return date
            }
            return .distantPast
        }
    }
    

    For convenience, if the call to getResourceValue() fails, it returns the value .distantPast by default. Using the try? form allows discarding the error which isn't always needed.

    0 讨论(0)
  • 2021-02-13 12:04

    in swift 3 previous calls are not available/deprecated:

    so use:

    var keys = Set<URLResourceKey>()
    keys.insert(URLResourceKey.isDirectoryKey)
    do{
        let URLResourceValues = try fileURL.resourceValues(forKeys: keys)
        }catch _{
    
       }
    
    0 讨论(0)
  • 2021-02-13 12:07

    If the getResourceValue(:forKey:) result is ultimately a logical value, you can cast the returned pointer value directly to a Bool value:

    let boolResult = rsrc as! Bool
    

    or simply test it as a Bool value without assigning it:

    if rsrc as! Bool {
        // true code
    } else {
        // false code
    }
    

    or do both:

    if let rsrc as! Bool {
        // true
    } else {
        // false
    }
    
    0 讨论(0)
  • 2021-02-13 12:09

    You need to make rsrc an optional AnyObject and pass it by reference like so:

    var anyError: NSError?
    var rsrc: AnyObject?
    var success = url.getResourceValue(&rsrc, forKey:NSURLIsUbiquitousItemKey, error:&anyError)
    

    Note: You do not need to initialize Optionals to nil, they are set to nil by default.

    If you then want to check if the value is an NSNumber you can then do a conversion:

    if let number = rsrc as? NSNumber {
        // use number
    }
    
    0 讨论(0)
  • 2021-02-13 12:17

    Here is drewag's code updated for Swift 2.0

        do {
            var rsrc: AnyObject?
            try element.getResourceValue(&rsrc, forKey: NSURLIsDirectoryKey)
            if let number = rsrc as? NSNumber {
                if number == true {
                    // do something
                }
            }
        } catch {
        }
    
    0 讨论(0)
提交回复
热议问题