我正在做一个快速项目,我需要读取一个包含字符串数据的长plist,然后将其放在字符串数组中以在代码上使用它。我做到了,而且效果很好。我用这些代码实现了
if let URL = Bundle.main.url(forResource: "Abbrivation", withExtension: "plist") {
if let englishFromPlist = NSArray(contentsOf: URL) as? [String] {
myPlistArray = englishFromPlist
}
}
print("count of plist is:",myPlistArray.count)
现在我的项目有所更改,我必须使用一个plist,其中包含几行字典,如下图所示
现在我必须将数组的所有字符串定义更改为字典,但是我的问题是所有更改都遇到错误。我搜索了很多方法,但是失败了。
现在我的问题是如何将plist的数据包括一些字典行到字典数组中。我将不胜感激。谢谢
答案 0 :(得分:2)
强烈建议您使用Codable
协议将属性列表解码为结构
struct Country : Decodable {
let flagEmoji, abb, countryName, pName : String
private enum CointryKeys : String, CodingKey { case flagEmoji, abb = "Abb", countryName, pName }
}
var countries = [Country]()
let url = Bundle.main.url(forResource: "Abbrivation", withExtension: "plist")!
let data = try! Data(contentsOf: url)
do {
countries = try PropertyListDecoder().decode([Country].self, from data}
} catch { print(error) }
print("count of plist is:", countries.count)
该代码不得崩溃。如果您犯了设计错误
注意:
从不使用Swift中的API NSArray(contentsOf
从磁盘读取属性列表文件。始终使用PropertyListSerialization
或PropertyListDecoder