最近发现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)
}
}
网友评论