什么是 SwiftyUserDefaults,为什么需要它?
\n\nSwiftyUserDefaults 是一个轻量级但功能强大的库,用于包装 Swift 中的标准 UserDefaults 类。如果您曾经直接使用过 UserDefaults,您会知道这可能很繁琐:您需要编写大量样板代码来保存和检索值,显式指定数据类型,使用字符串键(容易出错)以及处理可选值。
SwiftyUserDefaults 解决了所有这些问题。它提供了:
\n- \n
- 静态类型化: 编译器检查类型,从而消除运行时错误。 \n
- 全局访问: 通过方便的
Defaults属性访问值。 \n - 支持自定义类型: 您可以通过实现
DefaultsSerializable协议来保存任何自定义的结构体和类。 \n - 语法糖: 使用 UserDefaults 变得像使用普通属性一样。 \n
- 安全性: 消除了在字符串键中拼写错误的风险。 \n
该库非常适合存储少量数据:应用程序设置、用户界面状态、身份验证令牌等。它不适用于存储大量数据——为此,有 Core Data、Realm 或文件。
\n\n安装
\n\nSwiftyUserDefaults 通过 Swift Package Manager (SPM)、CocoaPods 和 Carthage 分发。我们来看两种最流行的方法。
\n\nSwift Package Manager(推荐)
\n- \n
- 在 Xcode 中,打开菜单:
File → Add Packages...\n - 粘贴仓库 URL:
https://github.com/sunshinejr/SwiftyUserDefaults.git\n - 选择版本(推荐最新的稳定版)并点击
Add Package。 \n - 确保该包已添加到您的目标(target)中。 \n
CocoaPods
\n在您的 Podfile 中添加:
target 'YourAppTarget' do\n use_frameworks!\n pod 'SwiftyUserDefaults', '~> 5.3'\nend\n然后执行 pod install。
安装后,在需要的文件中导入该库:
\nimport 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