我应该如何从UserDefaults更新对象值?

时间:2019-09-02 08:48:06

标签: swift

下面是

struct User:Codable {
    static var shared = User()
    var name:String!
    var age:Int!
}

用户可以保存其信息

var userInfo = User.shared
userInfo.name = "Kevin"
userInfo.age = 28
UserDefaults.standard.set(try? PropertyListEncoder().encode(userInfo), forKey:"UserInformation")

我在下面尝试过

但它似乎创建了新对象

UserDefaults.standard.set(try? PropertyListEncoder().encode(userInfo.age == 32), forKey:"UserInformation")

是否可以从UserDefault更新userInfo对象?

只喜欢更改userInfo.age = 32

1 个答案:

答案 0 :(得分:2)

您需要对对象进行解码,更改其值,然后再次对其进行编码:

guard let data = UserDefaults.standard.data(forKey: "UserInformation") else {
    // no data associated with the key!
}
guard var obj = try? PropertyListDecoder().decode(User.self, from: data) else {
    // something wrong happened with decoding 
}
obj.age = 32 // changing the object...
guard let newData = try? PropertyListEncoder().encode(obj) else {
    // something wrong happened with encoding
}
UserDefaults.standard.set(newData, forKey: "UserInformation")