美文网首页
用SwiftyUserDefaults封装用户信息缓存工具类

用SwiftyUserDefaults封装用户信息缓存工具类

作者: YannChee | 来源:发表于2022-12-17 12:29 被阅读0次

    最近发现YYCache 框架在iOS15 以上系统中,清除硬盘缓存的功能失效了,
    导致app的用户退出登录清理缓存信息的逻辑出现Bug

    由于项目主要使用swift框架开发,就使用swift的缓存框架来代替,刚好项目的一个SDK 依赖了SwiftyUserDefaults 这个swift框架,查了一下接近5K Star了,目前最新是5.0版本

    它是对NSUserDefaults 的扩展,支持OC 和 swift,使用起来很简章,需要两步:
    第一步定义key ,第二步调用
    例如:

    extension DefaultsKeys {
        var username: DefaultsKey<String?> { .init("username") }
        var launchCount: DefaultsKey<Int> { .init("launchCount", defaultValue: 0) }
    }
    
    let username = Defaults[\.username]
    Defaults[\.username] = "张三"
    Defaults[\.launchCount] += 1
    

    基于这个框架,我封装 UserInfoManager 工具类,同时支持OC 和swift

    import SwiftyUserDefaults
    
    extension DefaultsKeys {
        var lifeFormUserInfoKey: DefaultsKey<LifeformUserInfo?> {
            DefaultsKey.init(#function)
        }
    }
    
    @objc
    class UserInfoManager: NSObject {
        @objc static let shared = UserInfoManager()
        
        @objc var userID: Int64 {
            get {
                guard let userInfo = userInfo else { return 0 }
                return userInfo.user_id
            }
        }
        
        fileprivate  var _userInfo: LifeformUserInfo?
        @objc private(set)  var userInfo: LifeformUserInfo? {
            
            set {
                _userInfo = newValue
            }
            
            get {
                // 1.先读取内存
                if (_userInfo != nil && _userInfo!.user_id > 0) {
                    return _userInfo!
                }
                // 2.读取缓存
                return readCachedUserInfo()
            }
        }
        
        private override init() {}
        
        /// 缓存用户信息
        @objc func cachedUserInfo(userInfo: LifeformUserInfo?) {
            _userInfo = userInfo
            Defaults[\.lifeFormUserInfoKey] = userInfo
        }
        /// 读取用户信息
        @objc func readCachedUserInfo() -> LifeformUserInfo? {
            return Defaults[\.lifeFormUserInfoKey]
        }
        /// 清除用户信息
        @objc  func clearCachedUserInfo() {
            _userInfo = nil
            Defaults.remove(\.lifeFormUserInfoKey)
        }
    }
    
    

    相关文章

      网友评论

          本文标题:用SwiftyUserDefaults封装用户信息缓存工具类

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