UserDefaults常用属性和方法
UserDefaults常用属性和方法

UserDefaults常用属性和方法

常用属性和方法

一、核心存取方法

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/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注