以下示例中的方法fileExistsAtPath()仅接受单个参数。
if fm.fileExistsAtPath(result, isDirectory:&isDir) {
确切的错误消息是:“调用中的额外参数'isDirectory'。
知道什么是错的吗?
答案 0 :(得分:62)
问题在于isDirectory
是UnsafeMutablePointer<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 }))
似乎不允许同时检查文件和目录。