swift - 如何在 Swift 中创建嵌套的字典元素?
问题描述
我想创建一个变量来存储它:
["messageCode": API_200, "data": {
activities = (
{
action = 1;
state = 1;
}
);
messages = (
{
body = hi;
// ...
}
);
}, "message": ]
我所做的是这样的:
var fullDict: Dictionary<String, AnyObject> = [:]
fullDict["messageCode"] = "API_200" as AnyObject
var data: Dictionary<String, AnyObject> = [:]
fullDict ["data"] = data as AnyObject
这种方式是否正确以及如何添加活动?
解决方案
我建议去创建一个自定义模型:
struct Model {
var messageCode: String
var data: MyData
var message: String
}
struct MyData {
let activities: [Activity]
let messages: [Message]
}
struct Activity {
var action: Int
var state: Int
}
struct Message {
var body: String
// ...
}
因此,您可以将其用作:
let data = MyData(activities: [Activity(action: 1, state: 1)], messages: [Message(body: "hi")])
let myModel = Model(messageCode: "API_200", data: data, message: "")
但是,如果您出于某种原因必须将其声明为字典,则可能是这样的:
let myDict: [String: Any] = [
"messageCode": "API_200",
"data": ["activities": [["action": 1, "state": 1]],
"messages": [["body": "hi"]]
],
"message": ""
]
这意味着这myDict
是一个字典包含:
messageCode
细绳。data
作为嵌套字典,其中包含:activities
字典数组(数组[String: Int]
)。messages
字典数组(数组[String: String]
)。
message
细绳。
您应该使用建模方法的最简单的原因之一是,在读取 from 时myModel
,您所要做的就是使用点.
符号。与将其用作字典不同,您必须对它的值进行大小写,这在某些方面可能会让人头疼。例如,假设我们要访问数据消息数组中的第一个消息体:
模型:
myModel.data.messages.first?.body
字典:
if let data = myDict["data"] as? [String: [[String: Any]]],
let messages = data["messages"] as? [[String: String]],
let body = messages.first?["body"] {
print(body)
}
推荐阅读
- python - 将 dict 添加到 Item dynamodb python
- google-apps-script - 服务超时电子表格 - 可能在脚本运行时暂停表格刷新?
- android - lateinit 属性 homeViewModel 尚未初始化
- logging - 有没有办法在我的应用程序的生产版本中静态禁用 Rust 日志记录?
- matlab - 如何在 MATLAB 图上切换 x 和 y 值的显示,而不切换 plot() 参数
- python - 使用移动内核窗口时 Numba 失败:TypingError,定义错误
- bash - 通过单个 ctrl+c 输入在 bash 中杀死多个进程
- javascript - 将 Blaze 与 React 混合时,有没有办法将 html 文件中的代码作为反应子项传递?
- javascript - 如何在 API 调用中使用当前日期/时间?
- ios - 在金属中如何清除深度缓冲区或模板缓冲区?