对plist数据进行排序

时间:2017-02-24 17:31:56

标签: swift dictionary property-list

我在plist中有一些重复数据,然后我将它提取到一个字典中并在我的应用程序中显示它。唯一的问题是它需要按照我把它放在plist中的相同顺序,但显然,字典不能被排序而且它是未排序的。那么我将如何实现这一目标呢?

我的plist数据像这样重复

enter image description here

然后我将其转换为类型[Int : ItemType]的字典,ItemType是我的数据协议,如下所示:

class ExhibitionUnarchiver {
    class func exhibitionsFromDictionary(_ dictionary: [String: AnyObject]) throws -> [Int : ItemType] {
        var inventory: [Int : ItemType] = [:]
        var i = 0;

        print(dictionary)

        for (key, value) in dictionary {
            if let itemDict = value as? [String : String],
            let title = itemDict["title"],
            let audio = itemDict["audio"],
            let image = itemDict["image"],
            let description = itemDict["description"]{
                let item = ExhibitionItem(title: title, image: image, audio: audio, description: description)
                inventory.updateValue(item, forKey: i);
                i += 1;
            }
        }

        return inventory
    }
}

这导致了这样的字典:

[12: App.ExhibitionItem(title: "Water Bonsai", image: "waterbonsai.jpg", audio: "exhibit-audio-1", description: "blah blah blah"), 17: App.ExhibitionItem.....

我希望,因为我制作了钥匙的Int,我可以对它进行排序,但到目前为止,我没有运气。你或许可以告诉我对swift很新,所以请提供你认为相关的任何信息。谢谢!

1 个答案:

答案 0 :(得分:1)

字典没有订单。如果您需要特定订单,请设置root类型的Array

enter image description here

或手动按键排序:

var root = [Int:[String:String]]()
root[1] = ["title":"Hi"]
root[2] = ["title":"Ho"]

let result = root.sorted { $0.0 < $1.0 }

print(result)

打印:

[(1, ["title": "Hi"]), (2, ["title": "Ho"])]