0
在一个函数中,我检索一个目录列表。我想让函数在返回目录之前接受一个过滤参数来过滤检索。将过滤器转换为Swift函数作为参数?
这是我的函数:
public func getDocumentPaths(filter: ???? = nil) -> [String] {
do {
var directoryUrls = try NSFileManager.defaultManager().contentsOfDirectoryAtURL(...)
// TODO: Filter the directory contents if applicable
if filter != nil {
directoryUrls = directoryUrls.filter(filter)
}
return directoryUrls.map { $0.absoluteString }
} catch let error as NSError {
return [String]()
}
}
最后,我想这样调用该函数:
getDocumentPaths()
getDocumentPaths { $0.pathExtension == "mp3" }
什么是滤波器参数类型允许这样做?
更新:基于@phimage's suggestion,我使上面的函数更像Swift 2.0。更是如此,FileKit看起来不错!
public func getDocumentPaths() -> [String] {
// Get the directory contents including folders
guard let directoryUrls = try? NSFileManager.defaultManager().contentsOfDirectoryAtURL(NSURL(string:"")!, includingPropertiesForKeys: nil, options: []) else {
// Failed so return empty list
return [String]()
}
return directoryUrls.map { $0.path! }
}
请注意(可能)'absoluteString'不是*您想要将url转换为字符串,而是使用'path'方法。有关类似问题,请参阅http://stackoverflow.com/questions/34135305/nsfilemanager-defaultmanager-fileexistsatpath-returns-false-instead-of-true。 –