Swift:如何表示类似实例的类型:[“区域”:“区域1”和“州”::[“州”:“州1”和“城市2”:[“城市1”和“城市2”]]

Swift:如何表示类似实例的类型:[“区域”:“区域1”和“州”::[“州”:“州1”和“城市2”:[“城市1”和“城市2”]],swift,Swift,以下是一个例子: var example1 = [ [ "region": "Region1", "states": [ [ "state": "State1", "cities": ["City1", "City2&qu

以下是一个例子:

var example1 = [
    [
        "region": "Region1",
        "states": [
            [
                "state": "State1",
                "cities": ["City1", "City2"]
            ]
        ]
    ]
]

如何表示类型,让我给出一个简单的示例,例如
[“苹果”、“橙色”、“香蕉”]
,那么类型是
[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文件中的信息

您可以将这些结构/类设置为可编码的,然后可以使用
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
}
要解码您的财产清单:

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
}

这是一个
[[String:Any]]
。这就是你想要的吗?我想在代码中定义一个类型,所以编译时。因为我在那个类型中有一个plist,所以我必须首先定义一个类型,以接收该plist文件中的信息。就这么简单吗?根据您的评论,我很确定这是一个。看起来你是在从plist读取数据?为什么不使用
Codable
structs和
PropertyListDecoder
而不是弱类型词典呢?原因很简单,我是一名新学生。。。一切都在学习的道路上…我可以问你另一个关于上传用户的地区信息到数据库的问题吗。如果我想应用程序可以适应不同的语言使用本地化系统,我可以翻译Plist文件使用本地化。然后用户使用不同的语言来显示语言的区域信息。但如果上传到数据库,可以上传什么样的信息?直接上传区域字符串?也许这不好。从数组上传区域的索引?(也许这个方法可以,但是开发人员以后不能更改plist文件的区域顺序,对吗?)?你有什么解决办法吗