【发布时间】:2017-02-24 17:31:56
【问题描述】:
我在 plist 中有一些重复数据,然后我将其提取到字典中并显示在我的应用程序中。唯一的问题是它需要与我将它放在 plist 中的顺序相同,但很明显,字典无法排序并且它是未排序的。那么我该如何实现呢?
我的 plist 数据这样重复
然后我将其转换为[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 还很陌生,所以请提供您认为相关的任何信息。谢谢!
【问题讨论】:
-
我认为保持顺序的唯一方法是使用数组而不是字典。如果字典中的
Int键很重要,我会将其存储为“标题”旁边的兄弟,等等。 -
在代码中将数组转换成字典很容易,但在字典中保持顺序是不可能的。
-
我一直在考虑这个...但是因为它是
ExhibitionItem结构的一部分,我不能像普通数组一样对其进行排序吗? -
我对您的评论感到困惑。我假设您希望对
ExhibitionItems 进行排序,对吗?如果您使用数组而不是带有数字键的字典,您的顺序将被保留。数组本质上是有序的,字典不是。
标签: swift dictionary property-list