swift - 文件存在则返回,否则返回false

标签 swift swift3 extension-methods

我正在尝试制作一个字符串扩展,用于在我的应用程序目录中搜索文件并返回该文件,如果该文件不存在则返回 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/

相关文章:

swift - 如何从同一 ViewController 的扩展访问 var

iOS 火力地堡 : Add data to firebase node of array type

ios - 如何在 xcode 的导航栏中嵌入搜索栏?

swift - 我可以使用可选链接为可选属性提供默认值吗?

swift - viewDidLoad 后未在测试中设置 XCTest 单元测试数据响应

c# - DbContext "using"在一行中

ios - 仅当用户进入指定区域时触发 localNotification

ios - 当尝试按下按钮将 Sprite 的 zRotation 增加 1 度时,旋转不正确

swift - 如何使宽度单元格等于字符串长度?

generics - 如何在 Kotlin 中编写通用扩展方法?