好睿思指南
霓虹主题四 · 更硬核的阅读氛围

SwiftUI中UserDefaults的实用使用技巧

发布时间:2026-01-20 07:21:15 阅读:176 次

在开发 ref="/tag/2031/" style="color:#2B406D;font-weight:bold;">SwiftUI 应用时,经常需要保存一些简单的用户设置或状态数据,比如用户是否开启夜间模式、上次打开的页面、输入的用户名等。这时候,UserDefaults 就派上用场了。它不是用来存大量数据的,但对轻量级的数据持久化来说,简单又高效。

UserDefaults 是什么?

UserDefaults 是 iOS 提供的一个轻量级本地存储方案,适合保存布尔值、字符串、数字、数组、字典这类小数据。它基于键值对(Key-Value)方式存储,应用重启后数据依然存在。

SwiftUI 中如何使用?

假设你正在做一个待办事项 App,想记住用户是否开启了“完成任务时震动”的开关。你可以用 @AppStorage 这个属性包装器,它和 UserDefaults 深度集成,写起来特别顺手。

<struct SettingsView: View {>
    <@AppStorage("vibrationEnabled") var vibrationEnabled = true>

    <var body: some View {>
        <Toggle("完成时震动", isOn: $vibrationEnabled)>
            <.padding()>
    <}>
<}>

这段代码里,@AppStorage 自动从 UserDefaults 读取 key 为 vibrationEnabled 的值,如果没存过就用默认值 true。每次切换开关,值会自动保存,不需要手动调用 set 或 synchronize。

直接操作 UserDefaults 的场景

有些时候你可能不用 @AppStorage,比如要在非 View 的地方存数据,像在一个工具类或网络请求回调里。这时可以直接调用 UserDefaults.standard。

<// 保存用户名>
<UserDefaults.standard.set("小明", forKey: "username")>

<// 读取用户名>
<if let name = UserDefaults.standard.string(forKey: "username") {>
    <print("欢迎回来,\(name)")>
<}>

注意:key 名一定要拼写正确,建议定义成常量,避免写错。

实际开发中的小提醒

别拿 UserDefaults 存密码、大量文本或复杂对象。真要存自定义类型,可以先用 JSONEncoder 转成 Data 再存,但数据一多还是推荐用 Core Data 或 FileManager。

<struct User: Codable {>
    <let name: String>
    <let age: Int>
<}>

<// 存用户信息>
<let user = User(name: "小红", age: 25)>
<if let data = try? JSONEncoder().encode(user) {>
    <UserDefaults.standard.set(data, forKey: "currentUser")>
<}>

<// 读取>
<if let data = UserDefaults.standard.data(forKey: "currentUser"),>
   <let user = try? JSONDecoder().decode(User.self, from: data) {>
    <print(user.name)>
<}>

这种做法可行,但只适合偶尔变、体积小的数据。要是用户频繁修改,还得考虑性能和崩溃风险。

UserDefaults 在 SwiftUI 里的使用,核心就是两个字:简单。只要把握好它的定位——存点小配置、小状态,不滥用,它就能默默帮你省不少事。