常用属性和方法
一、核心存取方法
1、set(_ value: Any?, forKey:):保存数据到指定 key。支持基础类型和一些 Foundation 对象(如 String, Int, Bool, Data, Array, Dictionary, URL)。
UserDefaults.standard.set("Tom", forKey: "username")
2、object(forKey:):读取任意类型对象(返回 Any?)。
if UserDefaults.standard.object(forKey: "isModelConfigManager") == nil {
UserDefaults.standard.set(true, forKey: "isModelConfigManager")
}
3、string(forKey:) / bool(forKey:) / integer(forKey:) / double(forKey:) / float(forKey:) / data(forKey:) / array(forKey:) / dictionary(forKey:) / url(forKey:) / stringArray(forKey:):按类型读取,更安全(自动转换类型)。
UserDefaults.standard.bool(forKey: "isFirstLaunch")
4、removeObject(forKey:):删除指定键的值。
defaults.removeObject(forKey: "token")
二、注册默认值
1、register(defaults:):注册一组“默认值”。这些值不会写入磁盘,而是在 key 没有实际存储值时提供默认返回值。通常在 App 启动时调用一次。
例如:
UserDefaults.standard.register(defaults: [
"theme": "light",
"volume": 0.5
])
若用户从未设置过这些 key,则 theme 会返回 “light”。
三、同步与域操作(几乎不用)
1、synchronize():已弃用。原本用于强制写入磁盘,但现在系统会自动管理同步,不推荐使用。
2、persistentDomain(forName:) / setPersistentDomain(_:forName:) / removePersistentDomain(forName:):操作整个域(domain)下的键值对,域相当于一个命名空间。默认域名是应用的 Bundle ID。
3、volatileDomain(forName:) / setVolatileDomain(_:forName:) / removeVolatileDomain(forName:) / volatileDomainNames:“易失域”,存在内存中,应用退出即消失。
4、dictionaryRepresentation():返回当前所有存储键值对的快照字典。
四、App Group / Suite 操作
1、addSuite(named:):让当前 UserDefaults 同时访问另一个 Suite(如 App Group 共享存储)。
2、removeSuite(named:):移除该 Suite 访问。
let sharedDefaults = UserDefaults(suiteName: "group.com.example.app")
sharedDefaults?.set(true, forKey: "isPremiumUser")
五、KVC(Key-Value Coding)访问相关
这些方法允许使用 Key-Value Coding(KVC)风格访问 UserDefaults 的值。
KVC 是 Objective-C 时代留下来的机制,可以用字符串路径访问对象属性。
1、setValue(_:forKey:):等价于 set(_:forKey:),但通过 KVC 实现;
2、value(forKey:) / value(forKeyPath:):通过 KVC 获取值,可用点语法路径;
3、value(forUndefinedKey:):当访问未定义的 Key 时调用,可用于自定义容错逻辑;
4、setValue(_:forUndefinedKey:):同理,用于 KVC 未定义键的设置。
一般不建议用这些来操作 UserDefaults,因为会模糊 Swift 类型安全特性。
六、约束或安全访问相关
1、objectIsForced(forKey:) / objectIsForced(forKey:inDomain:):检查某个键是否被“配置描述文件”(MDM 或系统策略)强制设置。普通开发者基本不会用到。
总结
常用:set、object(forKey:)、string(forKey:)、bool(forKey:)、removeObject
初始化时用:register(defaults:)
不推荐:synchronize()、KVC系列
进阶/特殊场景:addSuite(named:)、persistentDomain 系列
了解即可:objectIsForced、volatileDomain
相关文章
1、Swift使用UserDefaults保存数据:https://fangjunyu.com/2024/05/26/swift%e4%bd%bf%e7%94%a8userdefaults%e4%bf%9d%e5%ad%98%e6%95%b0%e6%8d%ae/
