如何将plist的数据包括字典行到字典数组以在代码上使用它

时间:2019-09-22 19:12:11

标签: ios arrays swift dictionary

我正在做一个快速项目,我需要读取一个包含字符串数据的长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,其中包含几行字典,如下图所示

enter image description here

现在我必须将数组的所有字符串定义更改为字典,但是我的问题是所有更改都遇到错误。我搜索了很多方法,但是失败了。

现在我的问题是如何将plist的数据包括一些字典行到字典数组中。我将不胜感激。谢谢

1 个答案:

答案 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从磁盘读取属性列表文件。始终使用PropertyListSerializationPropertyListDecoder