这个例子在 Swift 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 { //...}
您需要将此添加到您的第一个视图控制器:
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]
]
查看控制器 2 和 3
var dictionary : [String: [String: Int]] = [:]
现在您已经在视图控制器之间定义了一个通用接口,并且您已经告诉视图控制器它们必须遵守这种通用性,您可以简单地将这个为 segue 准备的函数粘贴到每个视图控制器中你的视图控制器。请注意,我们将视图控制器转换为我们的协议类型。由于我们的每个视图控制器都遵守我们的协议,因此演员表应该完美无缺,并且我们应该能够访问我们要转换的控制器中的字典。
override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
guard let vc = segue.destinationViewController as? ViewPassesData
else { fatalError("wrong vc type") }
vc.dictionary = self.dictionary
}
要测试我刚刚向您展示的内容,请在每个视图中的 viewDidLoad 中添加一条打印语句:
override func viewDidLoad() {
super.viewDidLoad()
print("dictionary: \(dictionary)")
}
您会看到您的数据集正在视图之间传输。您将能够更新数据集并将其传递到下一个视图。