通过Segues访问/更新嵌套字典

时间:2016-07-15 21:44:29

标签: swift dictionary nested

我遇到了问题。我正在使用swift创建一个应用程序,您可以通过主视图控制器上的按钮选择一个大陆。这会将您带到第二个视图控制器,在该视图控制器中,该大陆的国家及其人口将显示在文本视图中。稍后,您将使用文本字段从第三个视图控制器添加国家/地区和人口,然后将此信息添加回预览文本视图。将其添加到各自的大陆。

我在第一个视图控制器中有一个嵌套字典。当数据模型位于第一个视图上时,如何从第三个视图添加信息并在第二个视图上显示?

这是我的数据模型:

  //you can access any session data by session name using this // default is a session name
  $session_default = $this->session->userdata('default');

  echo $session_default ; // english

我是新手,这就是我完全困惑的原因。

1 个答案:

答案 0 :(得分:1)

  

这个例子在Swift 3中

根据我的理解,您需要在视图之间传递和改变数据集。

我提供了一种简单的方法,您可以在视图之间传递字典,您可以传递数据集,编辑它,并且您对数据集的更改将在您的数据集之间进行遍历视图。

定义一个协议,告诉您的视图控制器他们必须有一个类型为<?php $string = "one two three four"; echo trim_text($string, 3); ?> 变量的字典。

[String: [String: Int]]

使处理数据的每个视图控制器都符合此协议。

protocol ViewPassesData : class {
    var dictionary : [String: [String: Int]] { get set }
}

您需要将其添加到第一个视图控制器:

class FirstViewController : UIViewController, ViewPassesData { //...}

class SecondViewController : UIViewController, ViewPassesData { //...}

class ThirdViewController : UIViewController, ViewPassesData { //...}

这是为了查看控制器2&amp; 3

var dictionary : [String: [String: Int]] = [

        "North America" : ["country1" : 0, "country2" : 0, "country3" : 0],
        "Asia"          : ["country1" : 0, "country2" : 0, "country3" : 0],
        "South America" : ["country1" : 0, "country2" : 0, "country3" : 0],
        "Africa"        : ["country1" : 0, "country2" : 0, "country3" : 0],
        "Europe"        : ["country1" : 0, "country2" : 0, "country3" : 0],
        "Oceania"       : ["country1" : 0, "country2" : 0, "country3" : 0]

    ]

现在您已经在视图控制器之间定义了一个公共接口,并且您已经告诉您的视图控制器,他们必须必须遵循这种共性,您只需将此准备粘贴到segue功能进入每个视图控制器。请注意,我们将视图控制器转换为协议类型。由于我们的每个视图控制器都遵循我们的协议,因此演员应该完全正常,我们应该能够访问我们正在投射到的控制器中的字典。

var dictionary : [String: [String: Int]] = [:]

要测试我刚刚向您展示的内容,请在每个视图中向viewDidLoad添加一个print语句:

override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {      
    guard let vc = segue.destinationViewController as? ViewPassesData
       else { fatalError("wrong vc type") }

    vc.dictionary = self.dictionary
}

您会看到您的数据集正在您的观看次数之间传输。您将能够更新您的数据集并将其传递到下一个视图。