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 应用中有效地持久化和管理用户设置和偏好。