[英]Array from plist file
我有一个plist文件,但是从此文件中得到了一个混乱的数组:
if let path = Bundle.main.path(forResource: "SomePlistFile", ofType: "plist"){
if let array = NSDictionary(contentsOfFile: path){
let list = Array(array.allKeys)
print(list)
}
}
而print(list)的结果如下所示:
[9, 25, 18, 10, 26, 19, 11, 27, 12, 1, 28, 20, 13, 2, 29, 21, 14, 3, 4, 22, 15, 5, 6, 30, 23, 16, 7, 31, 24, 17, 8]
我需要像[1,2,3,....30,31]
数组
由于您是从plist获取list
,因此成功地将其作为一个数组,对其进行排序所需要做的就是使用sorted()
数组实例方法。
但是,由于要从plist文件中读取值,因此Array(array.allKeys)
的类型为[Any]
,为了能够使用sorted()
,必须将其 Array(array.allKeys)
,如下所示:
if let path = Bundle.main.path(forResource: "SomePlistFile", ofType: "plist"){
if let array = NSDictionary(contentsOfFile: path){
if let list = Array(array.allKeys) as? [Int] {
let sortedList = list.sorted()
print(sortedList)
}
}
}
sortedList
应该是期望的结果。
另一种方法是将NSDictionary
强制转换为[Int:Any]
这允许您调用.sorted()
if let path = Bundle.main.path(forResource: "SomePlistFile", ofType: "plist"){
if let array = NSDictionary(contentsOfFile: path) as? [Int:Any]{
let list = Array(array.keys).sorted()
print(list)
}
}
首先,您的问题有点误导。 由于所有属性列表键都必须为String
,所以print(list)
的结果不能为Int
数组。
其次,不要使用与NSDictionary
相关的API从磁盘读取属性列表,而应使用Data
和PropertyListSerialization
。
要对字符串键进行数字排序,请使用localizedStandardCompare
let url = Bundle.main.url(forResource: "SomePlistFile", withExtension: "plist")!
let data = try! Data(contentsOf: url)
let list = try! PropertyListSerialization.propertyList(from: data, format: nil) as! [String:Any]
let sortedList = list.keys.sorted{ $0.localizedStandardCompare($1) == .orderedAscending }
print(sortedList)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.