Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何在不同的类中共享数据_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

Swift 如何在不同的类中共享数据

Swift 如何在不同的类中共享数据,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我从firebase获取数据。然后使用(prepareforsgue)为下一个UIView设置值 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "ToContent" { if let indexPath = self.tableView.indexPathForSelectedRow { fi

我从firebase获取数据。然后使用(prepareforsgue)为下一个UIView设置值

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "ToContent" {
        if let indexPath = self.tableView.indexPathForSelectedRow {
            firstTB = segue.destinationViewController as! FirstTabBar
            firstTB.clickedRow = indexPath.row
        }
    }
}
FirstTabBar是一个包含3个UIView的Tabbar控制器。
这3个UIView类如何从FirstTabBar类获得该值?

您可以使用委托。我将用一个更简单的例子来解释,其中有两个选项卡栏,但您可以将其转换为您的需要

首先,我们必须创建一个协议和一个函数,我们希望在我们想要的视图控制器中执行它

protocol DataDelegate: class {

    func didReceiveData(data: String)
}
假设我们有FirstViewController用于第一个选项卡栏,而SecondViewController用于第二个选项卡栏。在第二视图控制器中,我们必须为委托声明一个弱变量

// In SecondViewController
weak var dataDelegate: DataDelegate?
FirstViewController中,我们必须遵循UITABBARController的delegate(不要忘记在viewDidLoad中将委托设置为self
self.tabBarController?.delegate=self
),并使用委托方法
tabBarController(tabBarController:UIAbbarController,didSelectViewController-viewController:UIViewController)

正如我们所看到的,viewController是我们点击的viewController(在我们的例子中,SecondViewController)。我们必须将其强制转换为SecondViewController,以便访问其属性,并将dataDelegate设置为self

现在我们有义务遵守DataDelegate协议。我们只有一个必须实现的函数-didReceiveData()

// MARK: - DataDelegateProtocol

extension FirstViewController: DataDelegate {

    func didReceiveData(data: String) {
        print(data)
    }
}
最后,在我们的SecondViewController中,我们必须告诉您希望在哪里执行该函数。我将执行viewdide,但您可以在任何需要的地方执行

// In SecondViewController
override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    self.dataDelegate?.didReceiveData("data")
}

这家伙很好地解释了委托。希望你能理解。

你可以使用委托。我将用两个选项卡栏的简单示例进行解释,但你可以根据自己的需要进行转换

首先,我们必须创建一个协议和一个函数,我们希望在我们想要的视图控制器中执行它

protocol DataDelegate: class {

    func didReceiveData(data: String)
}
假设我们有FirstViewController用于第一个选项卡栏,而SecondViewController用于第二个选项卡栏。在SecondViewController中,我们必须为代理声明一个弱变量

// In SecondViewController
weak var dataDelegate: DataDelegate?
FirstViewController中,我们必须遵循UITABBARController的delegate(不要忘记在viewDidLoad中将委托设置为self
self.tabBarController?.delegate=self
),并使用委托方法
tabBarController(tabBarController:UIAbbarController,didSelectViewController-viewController:UIViewController)

正如我们所看到的,viewController是我们点击的viewController(在我们的例子中,SecondViewController)。我们必须将其强制转换为SecondViewController,以便访问其属性,并将dataDelegate设置为self

现在我们有义务遵守DataDelegate协议。我们只有一个必须实现的函数-didReceiveData()

// MARK: - DataDelegateProtocol

extension FirstViewController: DataDelegate {

    func didReceiveData(data: String) {
        print(data)
    }
}
最后,在我们的SecondViewController中,我们必须告诉您希望在哪里执行该函数。我将执行viewdide,但您可以在任何需要的地方执行

// In SecondViewController
override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)

    self.dataDelegate?.didReceiveData("data")
}
这家伙解释得很好。希望你能理解。

简单

只需通过segue传递数据;假设有两个控制器,第一个控制器和第二个控制器,数据是DatatoPass,这是一类CoolData

在您来自的控制器中

override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) {
    let second = segue.destinationController as! SecondController
    second.representedObject = self.theDataToPass
}
在控制器中,您将

override func viewWillAppear() {
    self.thePassedData = self.representedObject as! CoolData
}
简单

只需通过segue传递数据;假设有两个控制器,第一个控制器和第二个控制器,数据是DatatoPass,这是一类CoolData

在您来自的控制器中

override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) {
    let second = segue.destinationController as! SecondController
    second.representedObject = self.theDataToPass
}
在控制器中,您将

override func viewWillAppear() {
    self.thePassedData = self.representedObject as! CoolData
}
使用sharedInstance使用sharedInstance