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