iOS缓存工具封装

日常中我们通常使用UserDefaults FMDB FileManager 等等方式去进行本地缓存的操作.

首先来看UserDefaults的日常存取使用方式:

存: UserDefaults.standard.set(value, forKey: key)
取: let value = UserDefaults.standard.value(forKey: key)
这样的使用方式你不能说就是错误的, 但是可能你当时写这段代码的时候你还知道这是用来做什么的, 过段时间呢? 是不是还要去想 这个 key 是什么意思, 我当时为什么这么写?

UserDefaults 推及FileManager, FMDB 是不可能直接用的, 基本都会做一层封装. 以这个背景为前提, 为了解决垃圾代码过多, 无法统一管理等操作, 我封装了CZBDataStorge这个库用在平常工作中使用.

CZBDataStorge里面包含了四中缓存方式, 分别是 UserDefaults Keychain DB FileManager.

先来介绍一下 UserDefaults 的使用方式:
首先需要创建一个遵守CZBUserDefaultsProtocol协议的枚举, 在枚举中定义要存储的值得key. 示例如下所示:

enum UserDefaultKeys: String, CZBUserDefaultsProtocol {
  case month
  case day
}

存值:

CZBUserDefaults.standard[UserDefaultKeys.month] = "11月"

取值: 这里接口返回的是Any类型, 开发者自己转成确定的类型.

let month = CZBUserDefaults.standard[UserDefaultKeys.month]

我做了什么呢? 在CZBUserDefaults内部, 我定义了它的下标方法, 得以实现通过下标的方式去存取值.

keyChain 的实现原理与CZBUserDefaults相同.

下边我们来说一下DB存储方式, 我这里使用的是WCDB, 用过WCDB的人都知道, 使用它从创建表到存储对象这个过程其实并不复杂, 我做的只是把这个操作封装起来了, 开发者不需要关心创建表的问题, 只需要遵守协议, 另外实现一下TableCodable的代理方法完成模型绑定就可以了. 下面我们来看一下使用方式:

模型Model需遵守CZBDbManagerProtocolTableCodable协议, 完成模型绑定. 例如:

class SampleTest: CZBDbManagerProtocol, TableCodable {

    var identifier: Int? = nil
    var description: String? = nil
    var offset: Int = 0
    var debugDescription: String? = nil

    enum CodingKeys: String, CodingTableKey {
        typealias Root = SampleTest
    static let objectRelationalMapping =   
        TableBinding(CodingKeys.self)
        case identifier = "id"
        case description
        case offset = "db_offset"
    }
}

例如你想插入一个SampleTest对象, 你不需要关注这个时候表是否创建了, 只需要使用对象方法insert() 就可以了, 如sample.insert(). 如果你想批量插入数据, 也可以[SampleTest(), SampleTest()].insert(). 这里还单独提供了一个insertOrReplace(), 字面语义, 如果数据库中存在则替换, 不存在则直接插入. 另外还提供了 delete update get 操作. 还提供了进阶的加密事务操作.

关于DB这个操作, 我还有更多设想, 比如不需要类去遵守TableCodable协议, 需要慢慢迭代.

FileManager 就是一个文件封装了, 没什么好介绍的.

关于上述文章都可以直接去git查看工具实现方式, 有详细的使用介绍, 另外有任何问题可以随时联系我.

你可能感兴趣的:(iOS缓存工具封装)