使用 PropertyListDecoder 使用 swift Codable 解析 plist 文件并维护字典的排序

问题描述

我需要快速解析 plist 并维护 plist 字典中条目的排序。
首选的解析方法是使用 Codable 协议,因为我想从我的 plist 中创建自定义对象。

我已经设置了以下示例:

// example plist
<?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>container</key>
    <dict>
        <key>first</key>
        <string>Rocinante</string>
        <key>second</key>
        <string>Donnager</string>
        <key>third</key>
        <string>Behemoth</string>
    </dict>
</dict>
</plist>


// example parsing code (playground-ready)
import Foundation

let plistURL: URL = Bundle.main.url(forResource: "test",withExtension: "plist")!
let data = try! Data(contentsOf: plistURL)
let decoder = PropertyListDecoder()

let result = try! decoder.decode(Model.self,from: data)

struct Model: Decodable {
    let container: Dictionary<String,String> // sure enough entries are in random order :(
}

我尝试使用来自 swift-collections 的新 OrderedDictionary,但它不符合 Codable 协议。

也许一些自定义解析为 Array 或 OrderedDictionary 会起作用,但我还没有弄清楚如何做到这一点(或者甚至可能)。

那么 – 如何在保持字典顺序的同时使用 Codable 解析 plist?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)