gpt4 book ai didi

ios - swift 5 : How to read variables in plist files?

转载 作者:行者123 更新时间:2023-12-02 16:44:49 43 4
gpt4 key购买 nike

我搜索了一种方法(或模板)来读取存储在 plist 文件中的变量。我看到了一些代码,但没有代码适用于最新的 Swift 版本。

我是 Swift 的新手,实际上我并没有检查它到底是如何工作的..谁能这么好给我举个例子?

我有一个 CollectionView 并想显示我的 plist 文件中的字符串。那是我的 plist 文件:

对于每个动物键(字典类型)两个子键(名称和图片)。根 --> 动物 --> Animals1

除了“name”和“picture”之外的所有键都是字典。现在我想获取字典并在我的收藏 View 中显示名称和图片。稍后我将添加更多变量。我希望这是可以理解的:'D

我的不完整代码:

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let path = Bundle.main.path(forResource: "Animals", ofType:"plist")!
let dict = NSDictionary(contentsOfFile: path)
SortData = dict!.object(forKey: "Animals") as! [Dictionary]
}

最佳答案

您的属性列表格式不是很方便。因为你想要一个数组,所以创建属性列表,其中包含键 animals 的数组(并将所有键命名为小写)

<?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>animals</key>
<array>
<dict>
<key>name</key>
<string>Tiger</string>
<key>picture</key>
<string>tiger_running</string>
</dict>
<dict>
<key>name</key>
<string>Jaguar</string>
<key>picture</key>
<string>jaguar_sleeping</string>
</dict>
</array>
</dict>
</plist>

然后创建两个结构

struct Root : Decodable {
let animals : [Animal]
}

struct Animal : Decodable {
let name, picture : String
}

和数据源数组

var animals = [Animal]()

并解码这些东西

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let url = Bundle.main.url(forResource: "Animals", withExtension:"plist")!
do {
let data = try Data(contentsOf: url)
let result = try PropertyListDecoder().decode(Root.self, from: data)
self.animals = result.animals
} catch { print(error) }
}

PropertyListDecoderPropertyListSerialization 是 Swift 中最先进的。 NSDictionary/NSArray API 是 objective-c-ish 并且已过时。

关于ios - swift 5 : How to read variables in plist files?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60803515/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com