如何检查 Swift URL 是否为目录

ngs*_*chr 7 macos ios swift

如何检查 Swift URL 是否代表文件或目录?

URL 对象有一个hasDirectoryPath属性,但其背后似乎没有任何“智能”。它仅反映isDirectory传递给 URL 的值。

代码:

  let URL1 = URL(fileURLWithPath: FileManager.default.currentDirectoryPath)
  print(URL1.hasDirectoryPath)
  let URL2 = URL(fileURLWithPath: FileManager.default.currentDirectoryPath, isDirectory: true)
  print(URL2.hasDirectoryPath)
Run Code Online (Sandbox Code Playgroud)

输出:

  false
  true
Run Code Online (Sandbox Code Playgroud)

Leo*_*bus 24

这个名字说明了一切“hasDirectoryPath”。它没有说明 URL 是一个目录并且它存在。它说它有一个目录路径。要确保 URL 是目录,您可以获取 URL ResourceKey isDirectoryKey

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


use*_*ser 7

我只是简化并升级了 Leo 的回答,并获得了更好的回报。

信息:在我的回答中,您会得到 3 个可能的结果,true表示 url 是一个目录,false表示它不是目录,而是一个文件!nil意味着它不是一个 Dir 或文件,因为我们可以给 url 一个虚拟 url 或一个网站,在这种情况下,您将返回 nil 以及来自 Swift 的额外信息,说明为什么返回为零并帮助您解决问题,让你知道url的情况如何。对于当前接受的答案,虚拟 URL 或无效 URL 可能会被某些开发人员误认为是文件。

extension URL {
    var isDirectory: Bool? {

        do {
            return (try resourceValues(forKeys: [URLResourceKey.isDirectoryKey]).isDirectory)
        }
        catch let error {
            print(error.localizedDescription)
            return nil
        }
        
    }
}
Run Code Online (Sandbox Code Playgroud)