plist 形式的字典字典的键类型是啥?

Posted

技术标签:

【中文标题】plist 形式的字典字典的键类型是啥?【英文标题】:What's the type of keys of a dictionary of dictionaries in the form of a plist?plist 形式的字典字典的键类型是什么? 【发布时间】:2018-01-17 20:16:40 【问题描述】:

Xcode 9.2 ; 斯威夫特 4

我手动制作了一个 plist 形式的字典。它是一个字典字典,如下图所示:

现在我想从 plist 中获取信息,所以我尝试对其进行解码。但是,我不得不给出所涉及元素的类型。那么,问题是,这个 plist 描述的字典的形式是什么? (例如:字符串数组将被写为 [String])。 提前致谢。

更新:这是我正在使用的代码,以及我尝试 [String:[String:Int]] 时的结果。

【问题讨论】:

【参考方案1】:

根字典是 [String:Any] 或更具体的 [String[String:Int]],仅考虑 visible 子字典。

如果其他字典包含与 [String:Int] 不同的类型,则您不能在不编写自定义初始化程序的情况下使用 PropertyListDecoder()

更新:

这是一个 q&d 示例,它以通常的方式将字典序列化为属性列表并使用 PropertyListDecoder() 对其进行解码。

在操场上试试

let dict = ["diccioNum": ["Num3": 3, "Num4": 4, "Num6": 6, "Num8": 8, "Num9": 9, "Num5": 5, "Num1": 1, "Num7": 7, "Num2": 2]]
do 
    let plistData = try PropertyListSerialization.data(fromPropertyList: dict, format: .xml, options: 0)

    let plist = try PropertyListDecoder().decode([String: [String:Int]].self, from: plistData)
    print(plist)
 catch  print(error) 

【讨论】:

它不起作用。我在操场上用代码更新了帖子。 你没有提到你将使用PropertyListDecoder。你期待什么样的结果?如果要将属性列表解码为结构,则必须为内部字典的每个键声明一个属性。请发布代码,而不是屏幕截图。 其他子字典和可见的一样,只是NUM被ALG、GEO和DYA代替。有没有办法知道键的类型,或者我必须像示例中那样使用代码创建 plist?

以上是关于plist 形式的字典字典的键类型是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Plist 中的字典使用相同的键给出不一致的结果

javascript中的字典

关于字典

Python 字典 keys() 方法

Python之字典

python-字典