用不同的字典对结构进行Plist

时间:2018-11-14 05:50:53

标签: swift dictionary struct plist

我有一个John [….] John [….] John [….] Jahn [….] Jaja [….] laja [….] … ,它是一个词典数组。 (根是数组)。 每个dic肯定有2个值:plistnameicon。 但是其中有些具有更多的键/值,有些没有

我正在尝试将数组读入结构:

Strings
  1. 我读了字典,如何阅读字典数组以及如何设置结构。

  2. 如何解决某些dic具有其他键没有的键?

2 个答案:

答案 0 :(得分:2)

第一个问题:

我阅读了字典,如何阅读字典数组以及如何设置结构。

1/3

就这么简单!

答案 1 :(得分:1)

如果要使用字典数组,则无需创建自己的Codable类。数组和字典已经实现了Codable

只需:

func functionsStruct() -> [[String: String]] {
    let url = Bundle.main.url(forResource: "FunctionsList", withExtension: "plist")!
    let data = try! Data(contentsOf: url)
    let decoder = PropertyListDecoder()
    return try! decoder.decode([[String: String]].self, from: data)
}

或者如果字典中包含字符串以外的值,请使用[[String: Any]]

然后您可以像这样访问nameicon

let dicts = functionsStruct()
print(dicts[0]["name"])

但是,我不明白您为什么坚持使用字典。我强烈建议您坚持使用Codable结构。您可以将可选键设置为可选:

struct Config: Decodable {
    let name: String
    let icon: String
    let optionalKey1: String?
    let optionalKey2: String?
}

如果键在plist中不存在,则其值为nil。

您需要解码Config的数组,而不是像以前那样仅解码Config

return try! decoder.decode([Config].self, from: data)