【发布时间】:2019-02-21 07:19:16
【问题描述】:
我试图在用户默认值中保存 Set<String> 类型并得到一个
“尝试设置非属性列表对象”错误..
这让我想知道,为什么 Set 不是属性列表类型?
为什么允许使用数组和字典,但不允许使用集合?
编辑:我知道存储数据的其他方式。我只是想知道 Apple 决定 Sets 不是属性列表类型是否有已知或估计的原因。
是不是因为 Set 没有像 Arrays (index) 和 Dictionaries (key) 这样的键?是因为集合是无序的吗?但是字典也是无序的..
【问题讨论】:
-
你期待什么答案? Apple 没有在属性列表中实现集合。在developer.apple.com/documentation/foundation/userdefaults中记录了用户默认可以存储什么样的对象。
-
我想知道为什么 Apple 没有在属性列表中实现集合。是因为他们没有钥匙吗?这会让哈希变得困难吗?
-
我不确定是否可以回答“为什么”。属性列表类似于 XML 文件,Apple 可以实现了一个
<set>...</set>元素,类似于<array>...</array>。也许它有一些历史原因,也许只是没有必要。 – 所有这些东西都比 Swift 早了很多年,也许 NSSet 是在属性列表之后引入的?我不知道。 -
我明白了。我想在苹果告诉我们之前我们不会知道。谢谢!
-
编码
sets和arrays在实践上没有区别。编码时总是可以将集合转换为数组,解码后再次转换为集合。
标签: ios swift nsuserdefaults swift4.2