数据持久化是应用开发中的重要环节,尤其在需要存储用户设置或长期保存数据的场景中。在 SwiftUI 中,我们可以通过 UserDefaults 和 Core Data 两种方式实现数据的持久化。 UserDefaults 适用于简单的数据存储,而 Core Data 则为复杂的数据结构提供强大的管理和持久化支持。
10.1 使用 UserDefaults 存储轻量数据
UserDefaults 是 iOS 中的一种轻量级数据存储方案,适合存储小型数据(如用户设置、状态等)。它支持基础数据类型(如 String、Int、Bool、Array 等)并自动持久化。
示例:使用 UserDefaults 存储用户设置
struct SettingsView: View {@AppStorage("username") private var username: String = "Guest"@AppStorage("isDarkMode") private var isDarkMode: Bool = falsevar body: some View {VStack {TextField("用户名", text: $username).padding().textFieldStyle(RoundedBorderTextFieldStyle())Toggle("深色模式", isOn: $isDarkMode).padding()Text("当前用户名: \(username)")Text("深色模式状态: \(isDarkMode ? "启用" : "禁用")")}.padding()}
}
在这个示例中,@AppStorage 是 SwiftUI 提供的属性包装器,用于将 UserDefaults 的存储直接绑定到视图中的变量。每当用户修改 username 或 isDarkMode 时,数据会自动存储到 UserDefaults 中,且视图会自动更新。
10.2 Core Data 基础:管理复杂数据
当应用需要存储结构化数据时,Core Data 是更合适的选择。Core Data 是一个对象图管理框架,提供数据库功能,适合存储复杂的数据结构,并支持查询、数据关联等功能。
示例:创建 Core Data 数据模型
在使用 Core Data 前,需要在 Xcode 中创建数据模型(Data Model 文件),并定义实体和属性。例如,我们可以创建一个 Task 实体,并为其添加属性 title 和 isCompleted。
- 在项目中添加一个 Data Model 文件,并命名为 Model。
- 打开 Model 文件,添加实体 Task,并添加两个属性:
• title (String)
• isCompleted (Boolean)
10.3 在 SwiftUI 中使用 Core Data
SwiftUI 与 Core Data 的集成方式非常简洁,主要通过 @FetchRequest 和 @Environm