作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我使用此代码转到新 Storyboard并将变量 X 传递给新 Storyboard中的 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")
你说的是“从 Storyboard 中实例化一个 View Controller ,并将其类型推断为 UIViewController
”。但是,您需要做的是将其指定为 ViewControllerCall
。
您可以通过类型转换来做到这一点——添加 as?查看 Controller 调用
。 (或者 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
的 View Controller 不是 ViewControllerCall 类型,它会使您的应用程序崩溃。
关于swift - 如何在新 Storyboard中将数据传递给 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50796534/
我是一名优秀的程序员,十分优秀!