如何在新故事板中将数据传递给 ViewController

How to pass data to ViewController in new storyboard

我使用此代码转到新故事板并将变量 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)

但是我得到这个错误:

Value of type 'UIViewController' has no member 'myVar'

这一行:

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

你说的是 "Instantiate a view controller from the storyboard, and infer its type to be a UIViewController"。但是,您需要做的是将其指定为 ViewControllerCall.

您可以通过类型转换 - 添加 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 类型,它会使您的应用程序崩溃。

您只需更改第二行代码。 1. 转到您的 Main 故事板并检查 class 是否有 ViewController 您要为其传递变量并设置与 class 名称相同的故事板标识符. 2. 现在,如果您的 class 名称是“ViewControllerCall”,则更改您的线路代码如下:

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