我对使用Swift进行编码相对较新。我试图将数据传递回另一个视图控制器,而不必选择与该控制器联系,以便用户可以停留在同一屏幕上。我正在研究使用委托,并且想知道这是否是在多个视图控制器上访问变量的最佳方法。谢谢
视图控制器1:
func passVariables() {
let passSleepValue = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "sbHome") as! sbHomeController
passSleepValue.getSleepValue = sleepValue
//navigationController?.pushViewController(passSleepValue, animated: true)
}
View Controller 2:
func updateDay() {
let dayScoreAvg = getSleepValue
dayScore.text = String(format: "%.1f", dayScoreAvg)
print("Get sleep Value is \(getSleepValue)")
}
答案 0 :(得分:0)
看起来您已经可以将数据传递给第二个ViewController,但是您不能传递一些数据。
所以一种方法是使用代理模式。
首先使用传递数据的方法声明委托协议(在您的情况下,可以只是传递conda install rpy2
)
String
然后在第二个ViewController中创建protocol SecondVCDelegate: class {
func passText(_ text: String)
}
变量
delegate
现在您可以在第一个ViewController上实现此协议
class SecondViewController: UIViewController {
weak var delegate: SecondVCDelegate?
...
}
在按下之前,将第二个VC的extension ViewController: SecondVCDelegate {
func passText(_text: String) {
// do something with text passed from second VC
}
}
设置为delegate
self
然后在第二个VC中,您可以仅在func passVariables() {
let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "sbHome") as! sbHomeController
viewController.getSleepValue = sleepValue
viewController.delegate = self
navigationController?.pushViewController(viewController, animated: true)
}
上调用方法,而在第一个VC中,此方法将被调用
delegate