使用Swift 3.0,我可以将数据传递给未被搜索的视图控制器吗?

时间:2017-09-19 22:59:29

标签: swift segue

我的程序中有3个视图控制器。我可以从第一个视图控制器向第三个视图控制器发送多个值而不进行分段吗?

或者我必须将值发送到第一个,第二个,然后是第三个?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您不应该像您所描述的那样直接传递值,因为您甚至不知道是否所有控制器都已实例化。创建一个模型类或结构,您可以在所有3个控制器中存储值和引用。模型类的基本示例:

import Foundation

fileprivate let sharedModelInstance = Model()

class Model {
    var basicString : String = "string"

    static var sharedInstance : Model {
        return sharedModelInstance
    }

    func setBasicString(_ str: String) {
        basicString = string
    }
}

然后是控制器:

import UIKit

class ViewController : UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // reads 'string'
        let aStr : String = Model.sharedInstance.basicString

        Model.sharedInstance.setBasicString("Hello")

        // Now 'Hello'
        let anotherStr : String = Model.sharedInstance.basicString
    }

}

这样,您的所有数据都是集中的,只要您始终返回模型,就不会在不同步的控制器之间存在数据。

答案 1 :(得分:0)

有很多方法可以将数据从一个视图控制器传递到另一个视图控制器。它们的共同点是,在传递数据时已经创建了视图。在您的方案中,它们并非都已创建。

因此,如果您从1到2到3,当1显示时,3还没有被实例化。您必须创建3,设置变量,然后将新创建的视图控制器3传递给视图控制器2,以便2可以继续并在屏幕上显示已创建的3。整个过程都会破坏你问题的主要目的,而且比你试图避免的步骤要多得多。

如果您要传递一个或两个变量,那么传递给2然后传递给3并不是一件麻烦事。如果您有大量数据,您可能需要考虑将其放入一个数组中以通过,将其保存到Core Data,甚至完全更改数据模型。