user10318011
user10318011

Reputation:

How should I update object value from UserDefaults?

There's Struct like below

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

User can save their info

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

I have tried below

but it seems to create new object

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

Is it possible just update userInfo object from UserDefault?

like only change userInfo.age = 32

Upvotes: 2

Views: 1296

Answers (1)

Sweeper
Sweeper

Reputation: 274750

You need to decode the object, change its value, then encode it back again:

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")

Upvotes: 3

Related Questions