【发布时间】:2019-11-08 15:50:40
【问题描述】:
(发布后编辑标题是字典数组,不是字典字典)
我在 Root 词典中有很多词典的 .plist。所有字典都有相同的键(“image”和“text”)。
如何从 .plist 中获取键和值以放入一个变量,如字典字典(包含更多项目,例如多达 100 个图像和文本),如下所示?
var imageTextDict = [["image":"1-image", "text":"Text for 1"], ["image":"2-image", "text":"Text for 2"] , ["image":"3-image", "text":"Text for 3"], ["image":"4-image", "text":"Text for 4"]]
我发现的大多数代码要么很旧,要么没有回答我的问题...我能得到的最接近的方法是打印 Root 字典中特定字典的键和值,而不是 Root 中的完整列表.
在 .plist (Key)Root、(Type)Dictionary、(Value)eg 中。 100 件商品(我的声望低于 10,所以无法上传图片)。
.plist 作为源代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>1</key>
<dict>
<key>image</key>
<string>1-image</string>
<key>text</key>
<string>Text for 1</string>
</dict>
<key>2</key>
<dict>
<key>image</key>
<string>2-image</string>
<key>text</key>
<string>Text for 2</string>
</dict>
<key>3</key>
<dict>
<key>image</key>
<string>3-image</string>
<key>text</key>
<string>Text for 3</string>
</dict>
.
.
.
</dict>
</plist>
下面的代码基于a tutorial on YouTube,这是我能找到的最新最简单的代码,但不是我想要的......
在 Combo.plist 文件中
struct dict: Decodable {
let image: String
let text: String
}
struct Config: Decodable {
let dict: dict
}
struct ConfigValues {
static func get() -> Config {
guard let url = Bundle.main.url(forResource: "Combo", withExtension: "plist") else {
fatalError("Could not find Combo.plist in your Bundle")
}
do {
let data = try Data(contentsOf: url)
let decoder = PropertyListDecoder()
return try decoder.decode(Config.self, from: data)
} catch let err {
fatalError(err.localizedDescription)
}
}
}
在 ViewController.swift 文件中 我尝试打印不同的东西,但无法从根目录打印整个字典数组。
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
print("Print \(ConfigValues.get().dict)")
print("Print \(ConfigValues.get().dict.image)")
print("Print \(ConfigValues.get().dict.text)")
print("Print \(ConfigValues.get().self)")
//using a closed range operator ... to create a range that goes from 1 to 100
for i in 1...100{
print(i)
}
}
赞赏任何方向。我应该使用数字 1,2,3... 作为字典中的键吗?如何获取代码中根字典项的总数以使用循环或映射进行迭代?谢谢。
【问题讨论】:
-
如果你真的拥有所有的数字,那么在顶层(根级别)使用数组怎么样?
-
在看到有人在类似情况下使用数组后,我从使用根级别的数组更改为字典。是 var imageTextDict = [["image":"1-image", "text":"Text for 1"], ["image":"2-image", "text":"Text for 2"], [ "image":"3-image", "text":"Text for 3"], ["image":"4-image", "text":"Text for 4"]] 表示一个或多个字典中的字典在一个数组中?谢谢。
-
你给的代码是一个字典数组
-
我只是按照建议将 Root 更改为数组。从xml来看,我猜如果翻译成一个变量, var imageTextDict = [["image":"1-image", "text":"Text for 1"], ["image":"2-image", "text":"Text for 2"], ["image":"3-image", "text":"Text for 3"]] 表示数组中的字典(不是字典中的字典)?
-
非常感谢。这是一个开始。
标签: swift loops dictionary