文章目录
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)
}
}
我的另外一篇博客: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)