我想创建一个存储此变量:
["messageCode": API_200, "data": {
activities = (
{
action = 1;
state = 1;
}
);
messages = (
{
body = hi;
// ...
}
);
}, "message": ]
Run Code Online (Sandbox Code Playgroud)
我所做的是这样的:
var fullDict: Dictionary<String, AnyObject> = [:]
fullDict["messageCode"] = "API_200" as AnyObject
var data: Dictionary<String, AnyObject> = [:]
fullDict ["data"] = data as AnyObject
Run Code Online (Sandbox Code Playgroud)
这样是否正确,我如何添加活动?
我建议创建一个自定义模型:
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
// ...
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以将其用作:
let data = MyData(activities: [Activity(action: 1, state: 1)], messages: [Message(body: "hi")])
let myModel = Model(messageCode: "API_200", data: data, message: "")
Run Code Online (Sandbox Code Playgroud)
但是,如果出于某种原因必须将其声明为字典,则可能是这样的:
let myDict: [String: Any] = [
"messageCode": "API_200",
"data": ["activities": [["action": 1, "state": 1]],
"messages": [["body": "hi"]]
],
"message": ""
]
Run Code Online (Sandbox Code Playgroud)
这意味着该myDict词典包含:
messageCode 串。data作为嵌套字典,其中包含:
activities字典数组(的数组[String: Int])。messages字典数组(的数组[String: String])。message 串。您应该采用建模方法的最简单原因之一是,当要从中读取时myModel,您要做的就是使用点.符号。与将其用作字典不同,您必须区分其值,这在某些时候可能令人头疼。例如,假设我们要访问数据消息数组中的第一个消息正文:
模型:
myModel.data.messages.first?.body
Run Code Online (Sandbox Code Playgroud)
字典:
if let data = myDict["data"] as? [String: [[String: Any]]],
let messages = data["messages"] as? [[String: String]],
let body = messages.first?["body"] {
print(body)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1048 次 |
| 最近记录: |