如何在Swift中创建嵌套的字典元素? [英] How to create nested dictionary elements in Swift?
问题描述
我想创建一个存储该变量的变量:
I want to create a variable which stores this:
["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
是这种方式是正确的,我如何添加活动?
Is this way is correct and how I can add activities?
推荐答案
因为您明确希望将其作为 [String:AnyObject ]
:
Since you explicitly want it as [String:AnyObject]
:
var dict: [String:AnyObject] = ["messageCode":"API_200" as AnyObject,
"data": ["activities": [["action":1,
"state":1]],
"messages": [["body":"hi"]]] as AnyObject,
"message": "" as AnyObject]
基本上所有根值都应按类型转换为AnyObject
Basically all the root values should be typecasted as AnyObject
或者很长距离:
//Activities is as Array of dictionary with Int values
var activities = [[String:Int]]()
activities.append(["action": 1,
"state": 1])
//Messages is an Array of string
var messages = [[String:String]]()
messages.append(["body" : "hi"])
//Data is dictionary containing activities and messages
var data = [String:Any]()
data["activities"] = activities
data["messages"] = messages
//Finally your base dictionary
var dict = [String:AnyObject]()
dict["messageCode"] = "API_200" as AnyObject
dict["data"] = data as AnyObject
dict["message"] = "" as AnyObject
print(dict)
解析为获取您的数据将是地狱;
示例(让我们捕获动作
):
let action = ((dict["data"] as? [String:Any])?["activities"] as? [String:Int])?.first?.value
如您所见,您需要在每个级别进行转换。这是在Swift中使用字典的问题。
As you can see you need to typecast at every level. This is the problem with using dictionaries in Swift. Too much cruft.
当然,您可以使用第三方库,例如 SwiftyJSON
可以将上述内容简化为:
Sure, you could use a third-party library like SwiftyJSON
to reduce the above to:
let action = dict["data"]["activities"][0]["action"]
但是您是否需要依赖项
如果定义了结构,则创建模型;正如 Ahmad F的答案所建议的那样。
If your structure is defined then create models instead; as Ahmad F's answer suggests. It will be more readable, maintainable and flexible.
...但是您可能会问,这就是纯 Dictionary
的方式。 code>元素。
...but since you asked, this is how one would do it with pure Dictionary
elements.
这篇关于如何在Swift中创建嵌套的字典元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!