如何在Swift中创建嵌套的字典元素? [英] How to create nested dictionary elements in Swift?

查看:284
本文介绍了如何在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆