每次调用 .insert() 或 .remove(at:) 时将更新的 Set 保存在 UserDefaults 中
Save updated Set in UserDefaults every time .insert() or .remove(at:) are called
我确定这是一个愚蠢的问题,但我在 phone 上,找不到任何类似的问题。
我有一套:
var mySet: Set<SomeObject>
我需要在应用程序启动时保持不变,大概是使用 UserDefaults。
如果我在每次修改 Set 时重新创建 Set 并将其重新保存到 UserDefaults,这就可以正常工作,但这看起来非常麻烦。有什么方法可以支持每次调用 .insert()
或 .remove(at:)
时更新 UserDefaults 值?
您可以为此目的使用 属性 观察器。这是一个简单的
一组整数的示例(保存为数组):
var mySet = Set(UserDefaults.standard.array(forKey: "mySet") as? [Int] ?? []) {
didSet {
// Save new value
UserDefaults.standard.set(Array(mySet), forKey: "mySet")
}
}
Set
是值类型,因此每次修改(插入,
removal, ...) 在变量中存储一个新值,并且 属性
观察者被触发。
我确定这是一个愚蠢的问题,但我在 phone 上,找不到任何类似的问题。
我有一套:
var mySet: Set<SomeObject>
我需要在应用程序启动时保持不变,大概是使用 UserDefaults。
如果我在每次修改 Set 时重新创建 Set 并将其重新保存到 UserDefaults,这就可以正常工作,但这看起来非常麻烦。有什么方法可以支持每次调用 .insert()
或 .remove(at:)
时更新 UserDefaults 值?
您可以为此目的使用 属性 观察器。这是一个简单的 一组整数的示例(保存为数组):
var mySet = Set(UserDefaults.standard.array(forKey: "mySet") as? [Int] ?? []) {
didSet {
// Save new value
UserDefaults.standard.set(Array(mySet), forKey: "mySet")
}
}
Set
是值类型,因此每次修改(插入,
removal, ...) 在变量中存储一个新值,并且 属性
观察者被触发。