(发布标题后,它是字典数组而不是字典的字典)
我在Root词典中有很多字典的.plist。所有词典都有相同的键(“图像”和“文本”)。
如何从.plist中获取键和值,以将其放入字典字典这样的变量中(具有更多项,例如最多100张图像和文本),如下所示?
var imageTextDict = [[“” image“:” 1-image“,” text“:” 1的文本“],[” image“:” 2-image“,” text“:” 2的文本“] ,[“ image”:“ 3-image”,“ text”:“ 3的文本”],[“ image”:“ 4-image”,“ text”:“ 4的文本”]]
我发现的大多数代码都很老或没有回答我的问题...我能得到的最接近的代码是打印Root词典中特定词典的键和值,而不是Root的完整列表。
.plist中的(Key)Root,(Type)Dictionary,(Value)例如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 ...作为字典的键吗?如何在代码中获取Root词典项的总数以循环或映射进行迭代?谢谢。