swift 使用FileManager保存/检索数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift 使用FileManager保存/检索数据相关的知识,希望对你有一定的参考价值。

public final class DiskCaretaker {
  public static let decoder = JSONDecoder()
  public static let encoder = JSONEncoder()
  
  public static func save<T: Codable>(_ object: T, to fileName: String) throws {
    do {
      let url = createDocumentURL(withFileName: fileName)
      let data = try encoder.encode(object)
      try data.write(to: url, options: .atomic)
    } catch (let error) {
      print("Save failed: Object: `\(object)`, " +
        "Error: `\(error)`")
      throw error }
  }
  
  public static func retrieve<T: Codable>(_ type: T.Type, from fileName: String) throws -> T {
    let url = createDocumentURL(withFileName: fileName)
    return try retrieve(T.self, from: url)
  }
  
  public static func retrieve<T: Codable>(_ type: T.Type, from url: URL) throws -> T {
    do {
      let data = try Data(contentsOf: url)
      return try decoder.decode(T.self, from: data)
    } catch (let error) {
      print("Retrieve failed: URL: `\(url)`, Error: `\(error)`")
      throw error
    }
  }
  
  public static func createDocumentURL(withFileName fileName: String) -> URL {
    let fileManager = FileManager.default
    let url = fileManager.urls(for: .documentDirectory,
                               in: .userDomainMask).first!
    return url.appendingPathComponent(fileName).appendingPathExtension("json")
  }
}

以上是关于swift 使用FileManager保存/检索数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 处理错误(FileManager 和其他一般)[关闭]

FileManager MoveItem 回调 - Swift

Swift 3 FileManager.default(......).first 是啥意思?

使用Swift的FileManager迭代文件夹及其子文件夹中的文件

使用 Swift 的 FileManager 遍历文件夹及其子文件夹中的文件

FileManager.default.contentsOfDirectory 在 swift 3 中失败