swift - 如何在新故事板中将数据传递给 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”
解决方案
在这一行:
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 类型,它将使您的应用程序崩溃。
推荐阅读
- arrays - 从被调用函数返回数组到父子程序
- ios - 在 iOS Swift 上从网络加载 MVVM 异步 UIImage
- spring-boot - 订阅了反应式管道,但在单元测试中 Mockito.verify() 失败(没有记录模拟调用)
- angular - Angular CLI 在容器内运行时未检测到更改
- react-native - Aws-amplify 不适用于 react-native 和 expo 版本 36.0.0
- visual-studio-code - Visual Studio Code Zip 文件编辑
- python - 如果另一列中有共同匹配,则拆分名字和姓氏
- php - Xampp 中的端口有问题
- c# - Blazor WebAssembly 与 AzureAD
- java - 如何直接调用 Java Arraylist 以打印到 txt 文件?