Swift 如何在不同的类中共享数据
我从firebase获取数据。然后使用(prepareforsgue)为下一个UIView设置值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
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中将委托设置为selfself.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中将委托设置为selfself.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