我想在设置值时直接与 UserDefaults 保持变量同步。我是这样做的:
var userId: String {
get {
return UserDefaults.standard.string(forKey: kUserIdKey) ?? ""
}
set {
UserDefaults.standard.set(newValue, forKey: kUserIdKey)
}
}
它工作正常,但这样做是否正确?
如果是这样,Array 呢?
var tagsList: [Int] {
get {
return (UserDefaults.standard.object(forKey: kTagsList) as? [Int]) ?? [Int]()
}
set {
UserDefaults.standard.set(newValue, forKey: kTagsList)
}
}
如果我添加一个元素 tagsList.append(0)
,新值是否存储在 UserDefaults 中?
更新。
最佳答案
简短回答:是的。
长答案:数组和字符串是 Swift 中的 struct
,它们在发生变异时语义上会生成一个全新的副本。
因此,setter 中的 newValue
是您对数组应用的任何变异的结果数组,无论它是 append
还是其他变异函数。
您可以像这样在 playground 中轻松验证此行为:
var array: [Int] {
get { return [1, 2, 3] }
set { print(newValue) }
}
array.append(4)
// Prints [1, 2, 3, 4]
关于ios - 将变量与 UserDefaults 同步的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46805344/