Craig Smith Craig Smith - 2 months ago 64
Swift Question

NSURL getResourceValue Swift 3

Thanks to a variety of helpful posts in this forum, I have some code that works for obtaining the Creation Date of a single user-selected NSURL. However, I cannot get the code to work for either a hard-coded NSURL, nor within a loop through an NSFileManager enumerator.

I am not a professional programmer; I make apps that are tools for office. My ultimate goal is to simply sort an Array of NSURL objects based on Creation Date.

The code I am using is below, which functions just fine as is, but if I try to use the commented line to evaluate a specific PDF file, I get the following error:

enter image description here

I get the exact same error when I try to add this code to a loop of NSURL objects procured via the NSFileManager Enumerator.

I cannot figure out how to use the error instruction to solve the problem. If anyone can assist, that would be tremendous. Thank you.

let chosenURL = NSOpenPanel().selectFile

//let chosenURL = NSURL.fileURL(withPath: "/Users/craigsmith/Desktop/PDFRotator Introduction.pdf")

do
{
var cr:AnyObject?
try chosenURL?.getResourceValue(&cr, forKey: URLResourceKey.creationDateKey)

if (cr != nil)
{
if let createDate = cr as? NSDate
{
print("Seems to be a date: \(createDate)")

let theComparison = createDate.compare(NSDate() as Date)

print("Result of Comparison: \(theComparison)") // Useless

let interval = createDate.timeIntervalSinceNow

print("Interval: \(interval)")

if interval < (60*60*24*7*(-1))
{
print("More than a week ago")

}
else
{
print("Less than a week ago")
}
}
else
{
print("Not a Date")
}
}
}
catch
{

}

Answer

You can extend URL as follow:

extension URL {
    var creationDate: Date? {
        return (try? resourceValues(forKeys: [.creationDateKey]))?.creationDate
    }
}

usage:

print(yourURL.creationDate)