检查NSURL是否是目录

ale*_*lex 8 nsurl swift

使用Swift时我想检查一个NSURL位置是否是一个目录.使用Objective-C这不是一个问题和工作查找,但当我将代码转换为Swift时,我遇到运行时错误.

也许有人可以指出我正确的方向?

import Foundation

let defaultManager = NSFileManager.defaultManager()
let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL
let localDocumentURLs = defaultManager.contentsOfDirectoryAtURL(documentsDirectory,
includingPropertiesForKeys: nil, options: .SkipsPackageDescendants, error: nil) as NSURL[]

for url in localDocumentURLs {
    var isError: NSError? = nil
    var isDirectory: AutoreleasingUnsafePointer<AnyObject?> = nil
    var success: Bool = url.getResourceValue(isDirectory, forKey: NSURLIsDirectoryKey, error: &isError)
}
Run Code Online (Sandbox Code Playgroud)

vad*_*ian 23

在iOS 9.0+和macOS 10.11+中,NSURL/中有一个属性URL

迅速:

var hasDirectoryPath: Bool { get }
Run Code Online (Sandbox Code Playgroud)

Objective-C的:

@property(readonly) BOOL hasDirectoryPath;
Run Code Online (Sandbox Code Playgroud)

  • 此属性不会查看文件系统,以查明URL是否实际上指向目录:URL(string:“ file:/// var /”)!. hasDirectoryPath是true(请注意尾随` /`),而`URL(string:“ file:/// var”)!.. hasDirectoryPath`为`false`。检查`resourceValues`是更好的方法。 (4认同)

hol*_*lex 14

我工作的报价很好:

var error: NSError?
let documentURL : NSURL = NSFileManager.defaultManager().URLForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomain: NSSearchPathDomainMask.UserDomainMask, appropriateForURL: nil, create: true, error: &error)
var isDirectory: ObjCBool = ObjCBool(0)
if NSFileManager.defaultManager().fileExistsAtPath(documentURL.path, isDirectory: &isDirectory) {
    println(isDirectory)
}
Run Code Online (Sandbox Code Playgroud)

注意:它检查 文件夹是否是Documents 文件夹.当然,你可以用任何东西替换URL.


小智 11

斯威夫特3

extension URL {
    var isDirectory: Bool {
        let values = try? resourceValues(forKeys: [.isDirectoryKey])
        return values?.isDirectory ?? false
    }
}
Run Code Online (Sandbox Code Playgroud)