为什么在未打开的可选类型中需要两个惊叹号?

时间:2015-08-19 18:22:54

标签: swift

我正在从一个非控制器类中呈现一个控制器,所以我抓住了根视图,并得到了“未解包”的常见错误,所以我放入了?并且要试着或强行打开,仍然说窗口没有被打开,所以它通过插入另一个来自动修复它。

UIApplication.sharedApplication().delegate?.window!!.rootViewController!.presentViewController(blah blah blah... { () -> Void in
        });

标题说明了一切。我唯一的猜测是窗口基本上是一个计算属性,给出一个可选的,你必须打开它吗?!? (语法不是拼写错误,只是确保我没有错误地结束句子)

1 个答案:

答案 0 :(得分:1)

您需要两个!,因为该类型是嵌套的可选项(UIWindow??)。

像这样:

let nested: Int?? = 3

// the safe way
if let innerValue = nested {
    // innerValue is of type Int?
    if let unwrapped = innerValue {
        // unwrapped is of type Int
    }
}