读取 PLIST 文件 Dict of Dict

Reading a PLIST file Dict of Dict

我正在尝试读取 Dictionary

中包含 Dictionary 的 plist 文件

示例:["Name":["Age":"Two", "Height":"Short"]]

这是我阅读文件的方式:

do {
    let data = try Data(contentsOf: URL(fileURLWithPath: path))
    let dataFromPlist = try PropertyListSerialization.propertyList(from: data, format: nil) as! [String:Any]
    print(dataFromPlist)
    } catch {
      print(error)
    }

但我的结果 print(dataFromPlist) 返回以下内容:

["Name": {
Age = 1;
Height = 1;
}]

如何转换我当前读取方法的结果或读取 .plist 文件,以便准确取回我保存到其中的内容:

["Name":["Age":"Two", "Height":"Short"]]

如果您只使用 [String:String]:

类型的嵌套字典,请尝试明确设置字典的格式
let dataFromPlist = try PropertyListSerialization.propertyList(from: data, format: nil) as! [String : [String : String ] ]

根据您的示例数据,我创建了一个 属性 列表,其源文件在 xml 中转换为此列表:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Name</key>
    <dict>
        <key>Age</key>
        <string>Two</string>
        <key>Height</key>
        <string>Short</string>
    </dict>
</dict>
</plist>

输出如你所愿:

["Name": ["Height": "Short", "Age": "Two"]]

项目根目录中带有 Example.plist 文件的完整示例代码:

let urlPath = Bundle.main.url(forResource: "Example", withExtension: "plist")
    if let urlPath = urlPath {
        do {
            let data = try Data(contentsOf: urlPath)
            let dataFromPlist = try PropertyListSerialization.propertyList(from: data, format: nil) as! [String : [String : String ] ]
            print(dataFromPlist)
        } catch {
            print(error)
        }
    }
}