iOS App 从 0 到 1

本地存储

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)

iOS App 从 0 到 1 · 主讲 SwiftUI / iOS