美文网首页
用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