//
|
// ArchiveTool.swift
|
// DolphinEnglishLearnStudent
|
//
|
// Created by 无故事王国 on 2024/6/21.
|
//
|
|
import Foundation
|
import HandyJSON
|
import JQTools
|
|
class ArchiveTool{
|
|
/// 缓存数据
|
/// - Parameters:
|
/// - model: HandJSON模型
|
/// - force: 是否强制写入
|
|
@discardableResult
|
static func archive(model:HandyJSON,force:Bool = false)->Bool{
|
guard let json = model.toJSON() else {return false}
|
guard let className = String(describing: model.self).components(separatedBy: "(").first else {return false}
|
guard var filePath = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).first else {return false}
|
filePath = filePath + "/archive"
|
|
if FileManager.default.fileExists(atPath: filePath) && !force{return true}
|
|
do {
|
try FileManager.default.createDirectory(at:URL(fileURLWithPath: filePath), withIntermediateDirectories: true)
|
}catch {
|
return false
|
}
|
filePath = filePath + "/\(className.jq_md5String()).archive"
|
|
guard let data = try? NSKeyedArchiver.archivedData(withRootObject: json, requiringSecureCoding: true) else {return false}
|
do{
|
try data.write(to: URL(fileURLWithPath: filePath))
|
return true
|
}catch _ {
|
return false
|
}
|
}
|
|
static func archive(models:[HandyJSON],force:Bool = false)->Bool{
|
let jsonString = models.jq_toJson1()
|
guard let className = String(describing: models.self).components(separatedBy: "(").first else {return false}
|
guard var filePath = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).first else {return false}
|
filePath = filePath + "/archive"
|
|
if FileManager.default.fileExists(atPath: filePath) && !force{return true}
|
|
do {
|
try FileManager.default.createDirectory(at:URL(fileURLWithPath: filePath), withIntermediateDirectories: true)
|
}catch {
|
return false
|
}
|
filePath = filePath + "/\(className.jq_md5String()).archive"
|
|
guard let data = try? NSKeyedArchiver.archivedData(withRootObject: jsonString, requiringSecureCoding: true) else {return false}
|
do{
|
try data.write(to: URL(fileURLWithPath: filePath))
|
return true
|
}catch _ {
|
return false
|
}
|
}
|
|
static func unarchive(model:HandyJSON.Type)->HandyJSON?{
|
guard let className = String(describing: model.self).components(separatedBy: "(").first else {return nil}
|
let encryptName = className.jq_md5String()
|
|
guard var filePath = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).first else {return nil}
|
filePath = filePath + "/archive/" + encryptName + ".archive"
|
|
let data = try? Data(contentsOf: URL(fileURLWithPath: filePath))
|
|
if let dict = NSKeyedUnarchiver.unarchiveObject(with: data!) as? Dictionary<String, Any>{
|
print(dict)
|
let model = model.deserialize(from: dict)
|
return model
|
}
|
return nil
|
}
|
|
static func unarchive(models:[HandyJSON].Type)->[HandyJSON]?{
|
guard let className = String(describing: models.self).components(separatedBy: "(").first else {return nil}
|
let encryptName = className.jq_md5String()
|
|
guard var filePath = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).first else {return nil}
|
filePath = filePath + "/archive/" + encryptName + ".archive"
|
|
let data = try? Data(contentsOf: URL(fileURLWithPath: filePath))
|
|
if let dict = NSKeyedUnarchiver.unarchiveObject(with: data!) as? Dictionary<String, Any>{
|
print(dict)
|
let model = models.deserialize(from: dict)
|
return model
|
}
|
return nil
|
}
|
|
}
|