Swift 2 iOS – 按创建日期排序的文件列表 – 更简洁的解决方案?

Swift 2 iOS – 按创建日期排序的文件列表 – 更简洁的解决方案?,第1张

概述在我的代码中,我正在返回一个[String]?包含存储在/ Documents / – 的文件名(lastPathComponent),按照上次修改的日期排序. 我相信我可能使用太多的步骤,并在这里寻找建议,如何减少代码. 为了达到目前所需的结果 – 我正在创建两个中间词典:var attributesDictionary:[String:AnyObject]?和var urlDictionary 在我的代码中,我正在返回一个[String]?包含存储在/ documents / – 的文件名(lastPathComponent),按照上次修改的日期排序.

我相信我可能使用太多的步骤,并在这里寻找建议,如何减少代码.

为了达到目前所需的结果 – 我正在创建两个中间词典:var attributesDictionary:[String:AnyObject]?和var urlDictionary = [NSURL:NSDate]().循环通过初始[NSURL]我使用两个步骤 – .resourceValuesForKeys初始化attributesDictionary.然后填入urlDictionary,使其包含URL和NSURLContentModificationDateKey关键字的值.

我觉得应该有一种方法来实现这个结果,而不必创建urlDictionary和attributesDictionary,而不需要循环.也许从urlArray直接.这是我当前的代码:

编辑:Arthur Gevorkyan在第一条评论中指出,do {}不是必需的.

func getfileList() -> [String]? {    let directory = NSfileManager.defaultManager().URLsForDirectory(.documentDirectory,inDomains: .UserDomainMask)[0]    let propertIEs = [NSURLLocalizednameKey,NSURLCreationDateKey,NSURLContentModificationDateKey,NSURLLocalizedTypeDescriptionKey]    // no catch required - contentsOfDirectoryAtURL returns nil if there is an error    if let urlArray = try? NSfileManager.defaultManager().contentsOfDirectoryAtURL(directory,includingPropertIEsForKeys: propertIEs,options:NSDirectoryEnumerationoptions.SkipsHIDdenfiles) {        var attributesDictionary: [String:AnyObject]?        var dateLastModifIEd: NSDate        var urlDictionary = [NSURL:NSDate]()        for URLs in urlArray {            // no catch required - resourceValuesForKeys returns nil if there is an error            attributesDictionary = try? URLs.resourceValuesForKeys(propertIEs)            dateLastModifIEd = attributesDictionary?[NSURLContentModificationDateKey] as! NSDate            urlDictionary[URLs] = dateLastModifIEd        }        // this approach to sort is used because NSDate cannot be directly compared with </>        return urlDictionary.filter{
if let urlArray = try? NSfileManager.defaultManager().contentsOfDirectoryAtURL(directory,options:.SkipsHIDdenfiles) {    return urlArray.map { url -> (String,NSTimeInterval) in        var lastModifIEd : AnyObject?        _ = try? url.getResourceValue(&lastModifIEd,forKey: NSURLContentModificationDateKey)        return (url.lastPathComponent!,lastModifIEd?.timeIntervalSinceReferenceDate ?? 0)    }    .sort({ 
let directory = fileManager.default.urls(for: .documentDirectory,in: .userDomainMask).first!if let urlArray = try? fileManager.default.contentsOfDirectory(at: directory,includingPropertIEsForKeys: [.contentModificationDateKey],options:.skipsHIDdenfiles) {    return urlArray.map { url in            (url.lastPathComponent,(try? url.resourceValues(forKeys: [.contentModificationDateKey]))?.contentModificationDate ?? Date.distantPast)        }        .sorted(by: { .1 > .1 }) // sort descending modification dates        .map { .0 } // extract file names} else {    return nil}
.1 > .1 }) // sort descending modification dates .map { .0 } // extract file names} else { return nil}
!= nil}.sort{.1.compare(.1) == NSComparisonResult.OrderedDescending }.map{.0}.map{.lastPathComponent!} } else { return nil }}
可能的解决方案

URL数组首先映射到(lastPathComponent,lastModificationDate)元组的数组,然后按照
最后修改日期,最后提取路径名.

attributesDictionary可以通过使用来避免
getResourceValue(_:forKey)仅检索最后一个修改日期.

Swift 3的更新:

总结

以上是内存溢出为你收集整理的Swift 2 iOS – 按创建日期排序的文件列表 – 更简洁的解决方案?全部内容,希望文章能够帮你解决Swift 2 iOS – 按创建日期排序的文件列表 – 更简洁的解决方案?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1026204.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存