UserDefaults 是 Swift 和 Objective-C 编程中一种轻量级的持久存储方式,适用于存储用户设置、偏好、简单应用配置等。以下是一些在 Swift 中使用 UserDefaults 的基本方法和示例。
基本用法#
存储数据
使用
set(_:forKey:)方法将数据存储到UserDefaults中。let defaults = UserDefaults.standard // 存储字符串 defaults.set("John Doe", forKey: "username") // 存储整数 defaults.set(25, forKey: "age") // 存储布尔值 defaults.set(true, forKey: "isLoggedIn")检索数据
使用
object(forKey:)或类型化的方法(如string(forKey:),integer(forKey:))来检索数据。// 检索字符串 if let username = defaults.string(forKey: "username") { print("Username: \(username)") } // 检索整数 let age = defaults.integer(forKey: "age") print("Age: \(age)") // 检索布尔值 let isLoggedIn = defaults.bool(forKey: "isLoggedIn") print("Is Logged In: \(isLoggedIn)")删除数据
使用
removeObject(forKey:)方法从UserDefaults中删除特定的数据。// 删除键为 "username" 的数据 defaults.removeObject(forKey: "username")注册默认值
使用
register(defaults:)方法注册应用的默认值。这些默认值在UserDefaults中没有写入数据时起作用。defaults.register(defaults: [ "username": "Guest", "age": 18, "isLoggedIn": false ])
进一步使用#
存储自定义对象
UserDefaults不直接支持存储自定义对象,但可以通过将对象编码为Data来存储:struct User: Codable { var name: String var age: Int } let user = User(name: "Alice", age: 30) // 编码 if let encoded = try? JSONEncoder().encode(user) { defaults.set(encoded, forKey: "user") } // 解码 if let savedUserData = defaults.data(forKey: "user"), let savedUser = try? JSONDecoder().decode(User.self, from: savedUserData) { print("User \(savedUser.name), age \(savedUser.age)") }同步数据
虽然
UserDefaults通常是自动同步的,但可以明确调用synchronize()方法来立即写入更改。不过,在现代 iOS 开发中,这个方法通常不需要显式调用,因为系统已经自动处理了数据的保存。defaults.synchronize()
使用建议#
轻量级数据: 尽量使用
UserDefaults存储小规模、轻量级的数据,如设置和配置。如果需要存储大量数据或敏感数据,考虑使用文件系统、数据库、或者钥匙串(Keychain)。键名管理: 使用常量或枚举来管理键名,避免手动输入以减少错误。
线程安全:
UserDefaults是线程安全的,可以在多线程环境中安全使用。
通过这些策略,可以利用 UserDefaults 在 iOS 或 macOS 应用中有效地持久化和管理用户设置和偏好。