在Swift中,fileExistsAtPath(_ path:String,isDirectory isDirectory:UnsafeMutablePointer <objcbool>) - &gt; Bool仅接受单个参数</objcbool>

时间:2014-10-13 11:12:49

标签: ios swift

以下示例中的方法fileExistsAtPath()仅接受单个参数。

if fm.fileExistsAtPath(result, isDirectory:&isDir) {

确切的错误消息是:“调用中的额外参数'isDirectory'。

知道什么是错的吗?

6 个答案:

答案 0 :(得分:62)

问题在于isDirectoryUnsafeMutablePointer<ObjCBool>而不是UnsafeMutablePointer<Bool>。您可以使用以下代码:

var isDir = ObjCBool(false)
if NSFileManager.defaultManager().fileExistsAtPath("", isDirectory: &isDir) {

}

if isDir.boolValue {

}

答案 1 :(得分:18)

有些人可能觉得这有点整洁。这是Swift 3。

var directory: ObjCBool = ObjCBool(false)
var exists: Bool = FileManager.default.fileExists(atPath: "…", isDirectory: &directory)

if exists && directory.boolValue {
    // Exists. Directory.
} else if exists {
    // Exists.
}

答案 2 :(得分:1)

func isDirectory(path: String) -> Bool {
  var isDirectory: ObjCBool = false
  NSFileManager().fileExistsAtPath(path, isDirectory: &isDirectory)
  return Bool(isDirectory)
}

答案 3 :(得分:0)

在Swift3中

var isDirectory:ObjCBool = true
var exists = FileManager.default.fileExists(atPath: cachePath, isDirectory: &isDirectory)

答案 4 :(得分:0)

您可以使用以下代码作为扩展程序。在Swift 4.0中检查目录是否存在

import Foundation

extension FileManager {

    func directoryExists (atPath path: String) -> Bool {
        var directoryExists = ObjCBool.init(false)
        let fileExists = FileManager.default.fileExists(atPath: path, isDirectory: &directoryExists)

        return fileExists && directoryExists.boolValue
    }
}

答案 5 :(得分:0)

这是Swift 5.3。

var directoryExists: ObjCBool = ObjCBool(false)
        let fileExists = FileManager.default.fileExists(atPath: path, isDirectory: UnsafeMutablePointer<ObjCBool>(mutating: withUnsafePointer(to: &directoryExists){ $0 }))

似乎不允许同时检查文件和目录。