本地存储
AppStorage、文件、简单模型持久化:关掉 App 数据还在。
1轻量偏好:AppStorage
struct SettingsView: View {
@AppStorage("showDone") private var showDone = true
var body: some View {
Toggle("显示已完成", isOn: $showDone)
}
}
≈ SharedPreferences / Preferences;只适合小开关、字符串,不适合大列表。
2模型列表:写入 Documents
@Observable
final class LocalTodoStore {
var items: [Item] = []
private var fileURL: URL {
FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
.appendingPathComponent("todos.json")
}
func load() {
guard let data = try? Data(contentsOf: fileURL) else { return }
items = (try? JSONDecoder().decode([Item].self, from: data)) ?? []
}
func save() {
guard let data = try? JSONEncoder().encode(items) else { return }
try? data.write(to: fileURL, options: .atomic)
}
}
增删改后记得
save()。App 被杀不会帮你自动刷盘。3怎么选
| 数据 | 方案 |
|---|---|
| 开关、主题 | AppStorage / UserDefaults |
| 中小 JSON 列表 | Documents 文件 |
| 复杂关系、查询 | SwiftData / Core Data(进阶) |
| 钥匙串令牌 | Keychain(别放 UserDefaults) |