我正在尝试制作一个字符串扩展,用于在我的应用程序目录中搜索文件并返回该文件,如果该文件不存在则返回 false。这是我拥有的:
extension String {
func doesFileWithNameExist() -> Bool {
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
let url = NSURL(fileURLWithPath: path)
let filePath = url.appendingPathComponent(self+".png")?.path
let fileManager = FileManager.default
if fileManager.fileExists(atPath: filePath!) {
return true
} else {
return false
}
}
}
现在我的函数只返回一个 Bool,但我想知道是否有办法只返回文件(如果存在),否则返回 false。有没有办法从函数返回不同的值类型?
最佳答案
强烈推荐使用 URL 相关的 API。这将返回一个可选的 UIImage
:
extension String {
func doesFileWithNameExist() -> UIImage? { // maybe better pngImageInDocumentsFolder()
let fileManager = FileManager.default
do {
let url = try fileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let fullURL = url.appendingPathComponent(self).appendingPathExtension("png")
_ = try fullURL.checkResourceIsReachable()
let data = try Data(contentsOf: fullURL)
return UIImage(data: data)
} catch {
return nil
}
}
}
或者使用 Leo 的大减法(还是稍微减法):
var image: UIImage? {
guard let url = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent(self).appendingPathExtension("png"),
let data = try? Data(contentsOf: url) else { return nil }
return UIImage(data: data)
}
关于swift - 文件存在则返回,否则返回false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42101063/