Swift 모델의 캐시 정책
import ObjectMapper
extension Mappable {
private static func cacheDirectory(isCreateFile:Bool, name:String) throws -> URL {
let url:URL = DHFileManager.documentDirectory().appendingPathComponent("\(name)_Data")
if isCreateFile && !FileManager.default.fileExists(atPath: url.path) {
let attr: [FileAttributeKey: Any] = [FileAttributeKey(rawValue: FileAttributeKey.protectionKey.rawValue): FileProtectionType.complete]
let ret = FileManager.default.createFile(atPath: url.path, contents: nil, attributes: attr)
if ret {
return url
} else {
throw NSError.init(domain: "fail", code: 10001, userInfo: ["fail" : " "])
}
}
return url
}
static func getCacheModel(class:T.Type) -> T? {
do {
let jsonString = try String(contentsOf: cacheDirectory(isCreateFile: false, name: "\(self)"))
return Mapper().map(JSONString: jsonString) ?? nil
} catch {
return nil
}
}
func writeCacheModel() -> Bool {
do {
let modelType = type(of: self)
let url = try Self.cacheDirectory(isCreateFile: true, name: "\(modelType)")
let string = self.toJSONString() ?? ""
try string.write(to: url, atomically: true, encoding: String.Encoding.utf8)
} catch {
return false
}
return true
}
static func removeCacheModel() -> Bool {
do {
let url = try Self.cacheDirectory(isCreateFile: true, name: "\(self)")
try FileManager.default.removeItem(at: url)
} catch {
return false
}
return true
}
}
파일 경로를 가져오는 방법:
class DHFileManager {
class func documentDirectory() -> URL {
let URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
return URL
}
class func libraryDirectory() -> URL {
let URL = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask).first!
return URL
}
class func cachesDirectory() -> URL {
let URL = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!
return URL
}
}
호출 방법도 간단합니다.
// model Mappable
let model = TestModel()
//
model.writeCacheModel()
//
let model = TestModel.getCacheModel(TestModel.self)
//
TestModel.removeCacheModel()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.