Swift 2 iOS – 按创建日期排序的文件列表 – 更简洁的解决方案
在我的代码中,我正在返回一个[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{$0 != nil}.sort{$0.1.compare($1.1) == NSComparisonResult.OrderedDescending }.map{$0.0}.map{$0.lastPathComponent!} } else { return nil } }
可能的解决方案:
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({ $0.1 > $1.1 }) // sort descending modification dates .map { $0.0 } // extract file names } else { return nil } URL数组首先映射到(lastPathComponent,lastModificationDate)元组的数组,然后按照 attributesDictionary可以通过使用来避免 Swift 3的更新: 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: { $0.1 > $1.1 }) // sort descending modification dates .map { $0.0 } // extract file names } else { return nil } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Swift新特性 -- 访问控制(Access Control)
- ruby-on-rails – Ruby检查datetime是否为iso8601并保存
- jsTree AJAX搜索一些节点的孩子?
- 关于JSON.stringify和Unicode编码,需要注意的几点
- flash设置HTTP_REFERER的尝试:失败
- Ruby – 检查block_given之间有什么区别?和!block.nil?
- c# – 如何使用基于单元格值的颜色设置Asp.net GridView单元
- c# – Windows 8网格应用程序中的自定义详细页面
- 【01】分组/捕获
- webpack+vue-cil中proxyTable处理跨域的方法