有如下所示的结构
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")
是否可以仅从用户默认更新用户信息对象?
喜欢只更改用户信息年龄 = 32
您需要解码对象,更改其值,然后再次编码:
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")