【问题标题】:Downcast from 'UIViewController?' to 'UIViewController' only unwraps optionals; did you mean to use '!'?从'UIViewController' 垂头丧气?到 'UIViewController' 只解开可选项;你的意思是使用'!'?
【发布时间】:2015-10-30 12:58:33
【问题描述】:

我正在使用下面的代码来设置根视图控制器。但它给了我错误:

    let storyboard = UIStoryboard(name:"SignUp", bundle:nil)
    let viewController = storyboard.instantiateInitialViewController() as! UIViewController
    self.window!.rootViewController = viewController

我收到类似Downcast from 'UIViewController?' to 'UIViewController' only unwraps optionals; did you mean to use '!'?的错误

我认为,它与“as!”有关,但它是在新的swift中引入的。

有人知道吗?

【问题讨论】:

  • 您编写的代码运行良好。是的,您必须输入“!”
  • 但是我必须在哪里放“!” ?
  • 是的,下面是正确的方法!!!

标签: ios iphone swift uiviewcontroller


【解决方案1】:

我想有两种方法

更安全的:

 let storyboard = UIStoryboard(name:"SignUp", bundle:nil)
 if let viewController = storyboard.instantiateInitialViewController(){
    self.window!.rootViewController = viewController
 }

编辑:删除as? UIViewController

编译器建议的那个:

 let storyboard = UIStoryboard(name:"SignUp", bundle:nil)
 let viewController = storyboard.instantiateInitialViewController()!
 self.window!.rootViewController = viewController

基本上编译器只是让你知道这段代码中的as! UIViewController与使用!基本相同

【讨论】:

  • 第一个示例中不需要as? UIViewController。这就是返回类型;你可以放下它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 2018-10-31
  • 2019-02-13
相关资源
最近更新 更多