如何在新的故事板上将数据传递到ViewController

sal*_*eri 1 xcode uiviewcontroller uistoryboard swift

我使用此代码转到新故事板,并将变量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)
Run Code Online (Sandbox Code Playgroud)

但是我得到这个错误:

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

Tom*_*you 6

在这一行:

let homeViewController: UIViewController = mainStoryboard.instantiateViewController(withIdentifier: "ViewControllerCall")
Run Code Online (Sandbox Code Playgroud)

您说的是“从情节提要中实例化视图控制器,并推断其类型为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)
}
Run Code Online (Sandbox Code Playgroud)

要么

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

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