问题描述
这是一个实例:
var example1 = [
[
"region": "Region1","states": [
[
"state": "State1","cities": ["City1","City2"]
]
]
]
]
如何表达类型,让我举一个简单的例子,例如["apple","orange","banana"]
,然后类型为[String]
,现在我想获得example1的类型。预先感谢。
解决方法
您应将嵌套类型设为:
struct Example {
let region: String
let states: [State]
struct State {
let state: String
let cities: [String]
}
}
所以结果将是:
let examples: [Example] = ...
不推荐
否则,您可以将其设为[[String: Any]]
,但是您将丢失所有嵌套类型,并且需要手动转换所有嵌套类型。
var example1: [[String: Any]] = ...
,
您显示的文字代表了一系列字典。但是字典具有不同的值类型,因此Swift可以做的最好的事情就是使类型为Any
的值,因此文字的类型为[[String: Any]]
。但是,要以有用的方式访问字典值,则需要进行大量转换。
这表明您不应该使用字典来存储数据。您应该编写自己的结构/类。
您还说过:
由于我具有该类型的plist,因此必须首先定义一个类型,以便在该plist文件中接收信息。
您可以使这些结构/类为Codable
,然后可以使用PropertyListDecoder
从属性列表中读取数据:
struct Example: Codable {
let region: String
let states: [State]
struct State: Codable {
let state: String
let cities: [String]
}
}
并解码您的属性列表:
let propertyListData: Data = ... // get the data from your property list
let decoder = PropertyListDecoder()
do {
let decoded = decoder.decode([Example].self,from: propertyListData)
// access your data here via "decoded"
} catch {
print(error) // error has occurred
}