Xcode — UserDefaults

UserDefaults 是 Swift 和 Objective-C 编程中一种轻量级的持久存储方式,适用于存储用户设置、偏好、简单应用配置等。以下是一些在 Swift 中使用 UserDefaults 的基本方法和示例。

基本用法 #

  1. 存储数据

    使用 set(_:forKey:) 方法将数据存储到 UserDefaults 中。

    let defaults = UserDefaults.standard
    
    // 存储字符串
    defaults.set("John Doe", forKey: "username")
    
    // 存储整数
    defaults.set(25, forKey: "age")
    
    // 存储布尔值
    defaults.set(true, forKey: "isLoggedIn")
    
  2. 检索数据

    使用 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)")
    
  3. 删除数据

    使用 removeObject(forKey:) 方法从 UserDefaults 中删除特定的数据。

    // 删除键为 "username" 的数据
    defaults.removeObject(forKey: "username")
    
  4. 注册默认值

    使用 register(defaults:) 方法注册应用的默认值。这些默认值在 UserDefaults 中没有写入数据时起作用。

    defaults.register(defaults: [
        "username": "Guest",
        "age": 18,
        "isLoggedIn": false
    ])
    

进一步使用 #

  1. 存储自定义对象

    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)")
    }
    
  2. 同步数据

    虽然 UserDefaults 通常是自动同步的,但可以明确调用 synchronize() 方法来立即写入更改。不过,在现代 iOS 开发中,这个方法通常不需要显式调用,因为系统已经自动处理了数据的保存。

    defaults.synchronize()
    

使用建议 #

  • 轻量级数据: 尽量使用 UserDefaults 存储小规模、轻量级的数据,如设置和配置。如果需要存储大量数据或敏感数据,考虑使用文件系统、数据库、或者钥匙串(Keychain)。

  • 键名管理: 使用常量或枚举来管理键名,避免手动输入以减少错误。

  • 线程安全: UserDefaults 是线程安全的,可以在多线程环境中安全使用。

通过这些策略,可以利用 UserDefaults 在 iOS 或 macOS 应用中有效地持久化和管理用户设置和偏好。

本文共 625 字,上次修改于 Dec 16, 2024