如何解决Swift:如何表示类似实例的类型[[“ region”:“ Region1”,“ states”:[[“ state”:“ State1”,“ cities”:[“ City1”,“ City2”]]]]]]
这是一个实例:
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
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。