iOS缓存工具封装

作者: SapientiaWind | 来源:发表于2019-04-22 17:37 被阅读172次

    日常中我们通常使用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缓存工具封装

        本文链接:https://www.haomeiwen.com/subject/epkugqtx.html