前言
开发移动应用时,请求网络资源是再常见不过的功能。如果每次都去请求,不但浪费时间,用户体验也会变差,所以移动应用都会做离线缓存处理,其中已图片缓存最为常见。但是时间长了,离线缓存会占用大量的手机空间,所以清除缓存功能基本是移动应用开发的标配
效果图
代码
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()