gpt4 book ai didi

ios - 为什么 Set 不是属性列表类型?

转载 作者:行者123 更新时间:2023-11-29 05:59:48 26 4
gpt4 key购买 nike

我试图保存 Set<String>输入用户默认值并得到一个“尝试设置非属性列表对象”错误..

这让我想知道,为什么 Set 不是属性列表类型?

为什么允许使用数组和字典,但不允许使用集合?

编辑:我知道存储数据的其他方法。我只是想知道 Apple 决定 Sets 不是属性列表类型是否有已知或估计的原因。

是因为集合没有像数组(索引)和字典(键)那样的键吗?是因为集合是无序的吗?但字典也是无序的..

最佳答案

属性列表代表数据,而不是实现细节。数组是一个有序列表。字典是字符串键到值的映射。什么是“集合”?对于简单的文本数据来说,它没有什么特别的意义。如果列表不能有重复项,则不要写入重复项。如果无序,则忽略该顺序。一切“类似集合”都与数据操作有关。 (对于实际上确实有重复元素的 plist-set,您期望什么行为?它会无效吗?如果不是,它怎么会不只是一个数组呢?)

属性列表不是通用的对象树序列化工具。这就是 NSCoder 的用途。它们主要是为人类可写的配置(如 Info.plist)而设计的,并且可以用任何语言进行解析。 NSUserDefaults 也不是通用数据存储(如果是,它会被称为“NSApplicationDataStore”或类似的名称)。它旨在以用户可以手动编辑的方式存储用户配置数据。

原始 (NeXTSTEP) 格式的输入要简单得多:

SomeKey = {
MyFirstProperty = ("here's", "a", "list");
SomeOtherThing = "I'm a string";
};

Apple 在 OS X 中转向了 XML,这使得输入更加困难,但基本方法是相同的。 (在 OS X 的早期,Apple 采取了很多举措将 Java 集成到系统中,包括更多地依赖 XML,包括 formal DTDs 。回想起来,其中许多举措可能是不幸的,但在当时是有意义的.)

Plist 解决与 JSON 相同的问题。它们提供了对原始数据进行编码所需的最小类型集,而不是用于实现算法的数据结构。

我并不是说 plist 是根据一些数学第一原理创建的。如果 NSSet 是配置数据中非常常见的类型,我确信它会找到进入该格式的方式。但它们并不是被发明作为保存任意应用程序数据的通用方法,NSUserDefaults 也不是。

关于ios - 为什么 Set 不是属性列表类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54801320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com