ios swift5 Codable 本地存储(存取) 字典转模型

1.本地存取

struct Item:Codable {
    
    
    var x = 0
    var y = 1
}

class LocalDataManager: NSObject {
    
    
    
    static let shared = LocalDataManager()
    private override init() {
    
    }
    
    private let fileManager = FileManager.default
    private let decoder = JSONDecoder()
    private let encoder = JSONEncoder()
    
    let filePath:String = NSHomeDirectory() + "/Documents/Items"
    var fileURL:URL {
    
    
        return URL(fileURLWithPath: filePath)
    }
    
    //向缓存中添加一个元素
    func saveItem(item:Item)  {
    
    
        var data = Data()
        guard let items = fetchItems() else {
    
    
            data = try! encoder.encode([item])
            try! data.write(to: fileURL, options: .atomic)
            return
        }
        var itemArr = items
        itemArr.append(item)
        data = try! encoder.encode(itemArr)
        //.atomic:如果没有文件会创建文件
        try! data.write(to: fileURL, options: .atomic)
    }
    
    //从缓存中获取元素数组
    func fetchItems()  -> [Item]? {
    
    
        guard let data = fileManager.contents(atPath: filePath) else {
    
     return nil }
        let items = try! decoder.decode([Item].self, from: data)
        return items
    }
    
    //清除缓存
    func clear(){
    
    
        try! fileManager.removeItem(atPath: filePath)
    }

}

参考博客:Swift:缓存Codable数据 - 简书

我的另外一篇博客:The file couldn’t be saved because the specified URL type

2.字典转模型

  • 核心代码
 let data = try JSONSerialization.data(withJSONObject: dict, options: opt)
  return try JSONDecoder().decode(Base.self, from: data)

参考博客:
Swift ZHCodable (Codable)字典转模型封装

3.读取并解析本地json文件

       let jsonString = Bundle.main.path(forResource: "Directions.geojson", ofType: nil)
        let data = try! Data(contentsOf: URL(fileURLWithPath: jsonString!))
        let modelArr:[TrackModel] = try! JSONDecoder().decode([TrackModel].self, from: data)
        print(modelArr)

猜你喜欢

转载自blog.csdn.net/baidu_40537062/article/details/125074281