每次调用 .insert() 或 .remove(at:) 时,在 UserDefaults 中保存更新的 Set

Posted

技术标签:

【中文标题】每次调用 .insert() 或 .remove(at:) 时,在 UserDefaults 中保存更新的 Set【英文标题】:Save updated Set in UserDefaults every time .insert() or .remove(at:) are called 【发布时间】:2018-04-13 18:55:26 【问题描述】:

我确定这是一个愚蠢的问题,但我正在打电话,找不到任何类似的问题。

我有一套:

var mySet: Set<SomeObject>

我需要在应用程序启动时坚持,大概使用 UserDefaults。

如果我每次修改 Set 时都重新创建并重新保存 Set to UserDefaults,这可以正常工作,但这看起来非常麻烦。有没有一种方法可以支持每次调用 .insert().remove(at:) 时更新 UserDefaults 值?

【问题讨论】:

添加一个属性观察者(didSet)怎么样? 调用 insert 时是否会触发 didSet?那会奏效的。 是的…… 傻我!当我的 ????电池已充电,我会试试看。 【参考方案1】:

您可以为此目的使用属性观察器。这是一个简单的 一组整数的示例(保存为数组):

var mySet = Set(UserDefaults.standard.array(forKey: "mySet") as? [Int] ?? []) 
    didSet 
        // Save new value
        UserDefaults.standard.set(Array(mySet), forKey: "mySet")
    

Set 是一个值类型,因此每次修改(插入, 删除,...)在变量中存储一个新值,并且属性 观察者被触发。

【讨论】:

以上是关于每次调用 .insert() 或 .remove(at:) 时,在 UserDefaults 中保存更新的 Set的主要内容,如果未能解决你的问题,请参考以下文章

堆排序

Python可迭代对象中的添加和删除(add,append,pop,remove,insert)

python的append insert extend pop del remove使用

append()/extend()/insert()/remove()/del/pop()/slice列表分片

leetcode练习:27. Remove Element & 35. Search Insert Position

数据结构搜索二叉树的(递归与非递归)实现,包括:增Insert,删Remove,查Find