前言
開發移動應用時,請求網絡資源是再常見不過的功能。如果每次都去請求,不但浪費時間,用戶體驗也會變差,所以移動應用都會做離線緩存處理,其中已圖片緩存最為常見。但是時間長了,離線緩存會占用大量的手機空間,所以清除緩存功能基本是移動應用開發的標配
效果圖
Paste_Image.png
Paste_Image.png
代碼
import UIKit
class FileTool: NSObject {
static let fileManager = NSFileManager.defaultManager()
/// 計算單個文件的大小
class func fileSize(path: String) -> Double {
if fileManager.fileExistsAtPath(path) {
var dict = try? fileManager.attributesOfItemAtPath(path)
if let fileSize = dict![NSFileSize] as? Int{
return Double(fileSize) / 1024.0 / 1024.0
}
}
return 0.0
}
/// 計算整個文件夾的大小
class func folderSize(path: String) -> Double {
var folderSize: Double = 0
if fileManager.fileExistsAtPath(path) {
let chilerFiles = fileManager.subpathsAtPath(path)
for fileName in chilerFiles! {
let tmpPath = path as NSString
let fileFullPathName = tmpPath.stringByAppendingPathComponent(fileName)
folderSize += FileTool.fileSize(fileFullPathName)
}
return folderSize
}
return 0
}
/// 清除文件 同步
class func cleanFolder(path: String, complete:() -> ()) {
let chilerFiles = self.fileManager.subpathsAtPath(path)
for fileName in chilerFiles! {
let tmpPath = path as NSString
let fileFullPathName = tmpPath.stringByAppendingPathComponent(fileName)
if self.fileManager.fileExistsAtPath(fileFullPathName) {
do {
try self.fileManager.removeItemAtPath(fileFullPathName)
} catch _ {
}
}
}
complete()
}
/// 清除文件 異步
class func cleanFolderAsync(path: String, complete:() -> ()) {
let queue = dispatch_queue_create("cleanQueue", nil)
dispatch_async(queue) { () -> Void in
let chilerFiles = self.fileManager.subpathsAtPath(path)
for fileName in chilerFiles! {
let tmpPath = path as NSString
let fileFullPathName = tmpPath.stringByAppendingPathComponent(fileName)
if self.fileManager.fileExistsAtPath(fileFullPathName) {
do {
try self.fileManager.removeItemAtPath(fileFullPathName)
} catch _ {
}
}
}
complete()
}
}
}
清除字符串小數點末尾的0
import UIKit
extension String {
/// 清除字符串小數點末尾的0
func cleanDecimalPointZear() -> String {
let newStr = self as NSString
var s = NSString()
var offset = newStr.length - 1
while offset > 0 {
s = newStr.substringWithRange(NSMakeRange(offset, 1))
if s.isEqualToString("0") || s.isEqualToString(".") {
offset -= 1
} else {
break
}
}
return newStr.substringToIndex(offset + 1)
}
}
使用方法
// MARK: - Cache路徑
public let LFBCachePath: String = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.CachesDirectory, NSSearchPathDomainMask.UserDomainMask, true).last!
cacheNumberLabel.text = String().stringByAppendingFormat("%.2fM", FileTool.folderSize(LFBCachePath)).cleanDecimalPointZear()