swift-對(duì)象存儲(chǔ)本地化

背景:

? ? ? ?項(xiàng)目里有一些具有收藏、點(diǎn)贊的需求需要存儲(chǔ)到本地的數(shù)據(jù),并且能看到收藏列表,因此要用到swift的數(shù)據(jù)存儲(chǔ)的知識(shí)。發(fā)現(xiàn)本地化比OC要簡(jiǎn)單很多。

模型處理

? ? ? ? 被存儲(chǔ)的對(duì)象要準(zhǔn)守Codable協(xié)議,這樣就能直接用JSONEncoder()和JSONDecoder()進(jìn)行編碼和解碼進(jìn)行data的轉(zhuǎn)換存入到內(nèi)存里面,這也是swift的高級(jí)之一,不用像swift那樣進(jìn)行解析匹配。這也是swft4.0推出的Codable,它可以自動(dòng)將json數(shù)據(jù)進(jìn)行解析為準(zhǔn)守了Codable的數(shù)據(jù)模型。(我們項(xiàng)目里使用的是第三方數(shù)據(jù)解析框架ObjectMapper),下面主要介紹一下文件的操作和解析

?創(chuàng)建統(tǒng)一的管理器

根據(jù)不同的業(yè)務(wù)來(lái)創(chuàng)建對(duì)于的filePath

//

importFoundation

importRxSwift

importRxCocoa

/// 收藏車(chē)型。

/// 車(chē)型對(duì)比

?classCollectDataManager:NSObject{

? ? enumDataType {

? ? ? ? casecarModelType

? ? ? ? caseCarHistory

? ? ? ? caseCarTrimCompareType

? ? }

?? static let shared: CollectDataManager = {

? ? ? ? return CollectDataManager()

? ? }()

? ? private override init() {

? ? ? ? super.init()

? ? }

?獲取并構(gòu)建存儲(chǔ)地址

FileManager類

? ? private lazy var carModelPath:URL= {

? ? ? ? let manager =FileManager.default

? ? ? ? varfilePath = manager.urls(for: .documentDirectory, in: .userDomainMask).first

? ? ? ? filePath!.appendPathComponent("carMedelInfos.archive")

? ? ? ? return filePath!

? ? }()

? ? private lazy var CarTrimCompareModelPath:URL= {

? ? ? ? let manager =FileManager.default

? ? ? ? varfilePath = manager.urls(for: .documentDirectory, in: .userDomainMask).first

? ? ? ? filePath!.appendPathComponent("CarTrimCompareModel.archive")

? ? ? ? return filePath!

? ? }()

? ? private lazy var CarHistoryPath:URL= {

? ? ? ? let manager =FileManager.default

? ? ? ? varfilePath = manager.urls(for: .documentDirectory, in: .userDomainMask).first

? ? ? ? filePath!.appendPathComponent("carModelsHistory.archive")

? ? ? ? return filePath!

? ? }()

讀取數(shù)據(jù)


? private? funcreadFile(type:DataType) -> [Any] {

? ? ? ? var path:URL? =nil

?? ? ? ? var cars:[Any] = []

? ? ? ? if DataType.carModelType? == type{

? ? ? ? ? ? path =carModelPath

? ? ? ? }else if DataType.CarTrimCompareType == type{

? ? ? ? ? ? path =CarTrimCompareModelPath

? ? ? ? }elseifDataType.CarHistory== type {

? ? ? ? ? ? path =CarHistoryPath

? ? ? ? }

?? ? ? ?If let dataRead = try ? Data(contentsOf:path!) {

? ? ? ? ? ? do{

? ? ? ? ? ? ? ? if type ==DataType.carModelType|| type ==DataType.CarHistory{

? ? ? ? ? ? ? ? ? ? cars? =try JSONDecoder().decode([CarModelInfo].self, from: dataRead)

? ? ? ? ? ? ? ? }else if DataType.CarTrimCompareType== type {

? ? ? ? ? ? ? ? ? ? cars =try JSONDecoder().decode([CarTrimCompareModel].self, from: dataRead)

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }catch{

? ? ? ? ? ? ? ? print(error)

? ? ? ? ? ? }

? ? ? ? }else{

//? ? ? ? ? ? print("文件不存在,讀取本地文件失敗") 無(wú)數(shù)據(jù)時(shí)提示,無(wú)必要

? ? ? ? }

? ? ? ? return cars

? ? }

保存數(shù)據(jù)

? private? func saveCarsModelInfo(cars: [CarModelInfo]) -> () {

? ? ? ? let dataWrite =try?JSONEncoder().encode(cars)

? ? ? ? do{

? ? ? ? ? ? try dataWrite?.write(to:carModelPath)

? ? ? ? }catch{

? ? ? ? ? ? print("保存到本地文件失敗")

? ? ? ? }

? ? }


? ? func saveHistoryCars(cars: [CarModelInfo]) -> () {

? ? ? ? let dataWrite =try?JSONEncoder().encode(cars)

? ? ? ? do{

? ? ? ? ? ? try dataWrite?.write(to:CarHistoryPath)

? ? ? ? }catch{

? ? ? ? ? ? print("保存到本地文件失敗")

? ? ? ? }

? ? }

? ? func saveCarCompareTrimList(cars: [CarTrimCompareModel]) -> () {

? ? ? ? let dataWrite =try?JSONEncoder().encode(cars)

? ? ? ? do{

? ? ? ? ? ? try dataWrite?.write(to:CarTrimCompareModelPath)

? ? ? ? }catch{

? ? ? ? ? ? print("保存到本地文件失敗")

? ? ? ? }

? ? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 建議大家看 JKSwiftExtension[https://github.com/JoanKing/JKSwif...
    IIronMan閱讀 5,487評(píng)論 2 29
  • Swift 介紹 簡(jiǎn)介 Swift 語(yǔ)言由蘋(píng)果公司在 2014 年推出,用來(lái)撰寫(xiě) OS X 和 iOS 應(yīng)用程序 ...
    大L君閱讀 3,423評(píng)論 3 25
  • 文件操作 NSFileManager 1.NSFileManager 專門(mén)負(fù)責(zé)文件/文件夾的管理操作,包括創(chuàng)建/刪...
    Jackjun閱讀 2,143評(píng)論 0 1
  • 前言:iOS的沙盒機(jī)制,應(yīng)用只能訪問(wèn)自己應(yīng)用目錄下的文件。iOS不像android,沒(méi)有SD卡概念,不能直接訪問(wèn)圖...
    ChinaSwift閱讀 2,290評(píng)論 1 12
  • 沒(méi)有永遠(yuǎn)的敵人,只有共同的利益,以及利益沖突下的矛盾凸起與沉淀,‘永遠(yuǎn)’這個(gè)緩慢的詞匯已經(jīng)越來(lái)越不適應(yīng)現(xiàn)在這個(gè)社會(huì)...
    上善若水_887e閱讀 277評(píng)論 0 0

友情鏈接更多精彩內(nèi)容