首页 > 解决方案 > 如何在新故事板中将数据传递给 ViewController

问题描述

我使用此代码转到新故事板并将变量 X 传递给新故事板中的 viewController

let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let homeViewController: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "ViewControllerCall")
homeViewController.myVar = "x"
self.present(homeViewController, animated: true, completion: nil)

但我得到这个错误:

“UIViewController”类型的值没有成员“myVar”

标签: swiftxcodeuiviewcontrolleruistoryboard

解决方案


在这一行:

let homeViewController: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "ViewControllerCall")

您是在说“从情节提要中实例化一个视图控制器,并将其类型推断为UIViewController”。但是,您需要做的是将其指定为ViewControllerCall.

您可以通过键入 cast-adding 来做到这一点as? ViewControllerCall。(或者as! ViewControllerCall,如果您不想使用该if let子句)。

您的代码应如下所示:

let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
if let homeViewController = mainStoryboard.instantiateViewController(withIdentifier: "ViewControllerCall") as? ViewControllerCall {
    homeViewController.myVar = "x"
    self.present(homeViewController, animated: true)
}

或者

let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
let homeViewController = mainStoryboard.instantiateViewController(withIdentifier: "ViewControllerCall") as! ViewControllerCall
homeViewController.myVar = "x"
self.present(homeViewController, animated: true)

请注意,通过使用as!我介绍的第二种方式,如果具有标识符的视图控制器ViewControllerCall不是 ViewControllerCall 类型,它将使您的应用程序崩溃。


推荐阅读