📜  可映射到 nsuserdefault (1)

📅  最后修改于: 2023-12-03 15:22:56.889000             🧑  作者: Mango

可映射到 NSUserDefaults

在 iOS 开发中,NSUserDefault 是一个常用的键值对存储容器。它使用了一个 plist 文件存储数据,可以存储 app 的一些设置和标识符等。而可映射到 NSUserDefaults,是指将自定义的数据类型映射到 NSUserDefaults 中,使其可以直接存储和读取。

实现方法

可以使用 Swift 中的 Codable 来实现对象与 NSUserDefaults 的映射。首先需要将对象实现 Codable 协议,然后使用 PropertyListEncoder 和 PropertyListDecoder 将对象转换为 plist 格式的数据,再进行存储和读取。

class CustomObject: Codable {
    var name: String
    var age: Int
    
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

// 存储
let object = CustomObject(name: "张三", age: 20)
let encoder = PropertyListEncoder()
if let data = try? encoder.encode(object) {
    UserDefaults.standard.set(data, forKey: "customObject")
}

// 读取
let decoder = PropertyListDecoder()
if let data = UserDefaults.standard.data(forKey: "customObject"),
   let object = try? decoder.decode(CustomObject.self, from: data) {
    print(object.name) // 张三
}

这里我们实现了一个 CustomObject 类,并将其继承自 Codable 协议。在存储时,我们使用 PropertyListEncoder 将对象转换为 plist 格式的数据,然后存储到 NSUserDefaults 中。在读取时,我们使用 PropertyListDecoder 将 NSUserDefaults 中的数据转换为 CustomObject 类型的对象。

总结

使用 Codable 可以方便地将自定义对象映射到 NSUserDefaults 中,从而实现数据的存储和读取。需要注意的是,当对象中含有不支持编码的属性时,需将其标记为 @nonobjc 或实现 CodingKeys 并排除该属性。