SwiftyUserDefaults 用于 Swift:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 SwiftyUserDefaults,为什么需要它?

\n\n

SwiftyUserDefaults 是一个轻量级但功能强大的库,用于包装 Swift 中的标准 UserDefaults 类。如果您曾经直接使用过 UserDefaults,您会知道这可能很繁琐:您需要编写大量样板代码来保存和检索值,显式指定数据类型,使用字符串键(容易出错)以及处理可选值。

\n\n

SwiftyUserDefaults 解决了所有这些问题。它提供了:

\n
    \n
  • 静态类型化: 编译器检查类型,从而消除运行时错误。
  • \n
  • 全局访问: 通过方便的 Defaults 属性访问值。
  • \n
  • 支持自定义类型: 您可以通过实现 DefaultsSerializable 协议来保存任何自定义的结构体和类。
  • \n
  • 语法糖: 使用 UserDefaults 变得像使用普通属性一样。
  • \n
  • 安全性: 消除了在字符串键中拼写错误的风险。
  • \n
\n\n

该库非常适合存储少量数据:应用程序设置、用户界面状态、身份验证令牌等。它不适用于存储大量数据——为此,有 Core Data、Realm 或文件。

\n\n

安装

\n\n

SwiftyUserDefaults 通过 Swift Package Manager (SPM)、CocoaPods 和 Carthage 分发。我们来看两种最流行的方法。

\n\n

Swift Package Manager(推荐)

\n
    \n
  1. 在 Xcode 中,打开菜单:File → Add Packages...
  2. \n
  3. 粘贴仓库 URL:https://github.com/sunshinejr/SwiftyUserDefaults.git
  4. \n
  5. 选择版本(推荐最新的稳定版)并点击 Add Package。
  6. \n
  7. 确保该包已添加到您的目标(target)中。
  8. \n
\n\n

CocoaPods

\n

在您的 Podfile 中添加:

\n
target 'YourAppTarget' do\n  use_frameworks!\n  pod 'SwiftyUserDefaults', '~> 5.3'\nend
\n

然后执行 pod install。

\n\n

安装后,在需要的文件中导入该库:

\n
import SwiftyUserDefaults
\n\n

快速入门

\n\n

让我们直接进入代码。以下是使用和不使用 SwiftyUserDefaults 的典型 UserDefaults 工作场景。

\n\n

不使用 SwiftyUserDefaults(标准方法)

\n
// 保存\nUserDefaults.standard.set("John", forKey: "user_name")\nUserDefaults.standard.set(25, forKey: "user_age")\nUserDefaults.standard.set(true, forKey: "is_logged_in")\n\n// 读取\nlet name = UserDefaults.standard.string(forKey: "user_name") ?? ""\nlet age = UserDefaults.standard.integer(forKey: "user_age")\nlet isLoggedIn = UserDefaults.standard.bool(forKey: "is_logged_in")
\n\n

使用 SwiftyUserDefaults

\n
// 定义键(可以在单独的文件中)\nextension DefaultsKeys {\n    var userName: DefaultsKey<String> { .init("user_name") }\n    var userAge: DefaultsKey<Int> { .init("user_age") }\n    var isLoggedIn: DefaultsKey<Bool> { .init("is_logged_in") }\n}\n\n// 保存\nDefaults[\\.userName] = "John"\nDefaults[\\.userAge] = 25\nDefaults[\\.isLoggedIn] = true\n\n// 读取\nlet name: String = Defaults[\\.userName]\nlet age: Int = Defaults[\\.userAge]\nlet isLoggedIn: Bool = Defaults[\\.isLoggedIn]\n\nprint("\\(name) is \\(age) years old. Logged in: \\(isLoggedIn)")
\n\n

如您所见,代码变得更简洁,类型在编译时进行检查,并且键在同一个地方定义。

\n\n

主要方法和函数

\n\n

让我们通过示例来了解该库的 10 个关键功能。

\n\n

1. Defaults[\\.key] — 获取

推荐