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

时间:2018-06-11 11:18:25

标签: swift xcode uiviewcontroller uistoryboard

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

2 个答案:

答案 0 :(得分:5)

在这一行:

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

您说"从故事板中实例化视图控制器,并将其类型推断为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 :(得分:0)

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

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