寫在前面
或許有這樣的需求,要求頁面在無網狀態先顯示上一次顯示的資料,這就涉及到快取,但是快取又分為檔案快取,歸檔等,realm 太過笨重,歸檔太麻煩,最後選擇了檔案快取,
看了很多部落格,在參考了別人的快取開源專案,
功能太過簡單單一化,比如:我想刪除某一個檔案下的快取資訊,大部分是隻提供了刪除所有快取
,不可以按目錄刪除。我總結了一個庫,可以非同步按照目錄刪除
。簡單方便,快捷神速,是居家iOS碼農必備之利器,具體功能模組如下。
複製程式碼
具體用法
現已經將此程式碼上傳到github上,有具體需要的可以移步github,下載完整程式碼。
複製程式碼
移步:DDGDataCache_Swift
//構建模擬資料
/**
* 模擬資料請求URL
*/
let URLString = "https://github.com/dudongge"
let URLString1 = "https://github.com/dudongge/DDGScreenShot"
let URLString2 = "https://github.com/dudongge/DDGMeiTuan"
let URLString3 = "https://github.com/dudongge/DGKVO"
/**
* 模擬伺服器請求資料
*/
let responseObject = [ "sex" : "男",
"city" : "上海",
"logintime" : "1445267749",
"name" : "東閣堂主",
"group" : "3",
"loginhit" : "4",
"id" : "234328",
"QQ" : "532835032" ]
1,//同步寫入(只有主目錄)
/**
寫入/更新快取(同步) [按APP版本號快取,不同版本APP,同一介面快取資料互不干擾]
- parameter jsonResponse: 要寫入的資料(JSON)
- parameter URL: 資料請求URL
- parameter path: 一級資料夾路徑path(必須設定)
- parameter subPath: 二級資料夾路徑subPath(可設定-可不設定)
- returns: 是否寫入成功
*/
if DDGDataCache.saveJsonResponseToCacheFile(self.responseObject as AnyObject,
URL: self.URLString,
path: "appCache") {
print("?(同步)儲存/更新成功")
} else {
print("?(同步)儲存/更新失敗")
}
/**
寫入/更新快取(非同步) [按APP版本號快取,不同版本APP,同一介面快取資料互不干擾]
- parameter jsonResponse: 要寫入的資料(JSON)
- parameter URL: 資料請求URL
- parameter subPath: 二級資料夾路徑subPath(可設定-可不設定)
- parameter completed: 非同步完成回撥(主執行緒回撥)
*/
DDGDataCache.save_asyncJsonResponseToCacheFile(self.responseObject as AnyObject,
URL: self.URLString3,
path: "appCache",
subPath: "userInfo") { (succ) in
if succ {
print("?(非同步)儲存/更新成功")
} else {
print("?(非同步)儲存/更新失敗")
}
}
複製程式碼
2.獲取已經快取的資料
/**
獲取快取的物件(同步)
- parameter URL: 資料請求URL
- parameter subPath: 二級資料夾路徑subPath(可設定-可不設定)
- returns: 快取物件
*/
if let json = DDGDataCache.cacheJsonWithURL(URLString) {
print(json)
}
//獲取指定快取資料
if let json = DDGDataCache.cacheJsonWithURL(URLString,subPath: "userInfo") {
print(json)
}
複製程式碼
3.獲取快取資料的大小
//獲取總的快取大小
let allSize = DDGDataCache.cacheAllSize()
let size = String(format: "%.6f", allSize)
print("快取大小(M)=\(size)")
//獲取制定路徑的快取大小(傳入二級路徑)
let allSize = DDGDataCache.cacheSizeWithUrl("userInfo")
print("快取大小(M)=\(allSize)")
複製程式碼
4,刪除快取
//清除全部快取
if DDGDataCache.clearAllCache() {
print("?清除快取成功")
} else {
print("?清除快取失敗")
}
//清除指定快取
if DDGDataCache.clearCacheWithUrl("userInfo") {
print("?清除快取成功")
} else {
print("?清除快取失敗")
}
複製程式碼