可选链接未按预期工作

时间:2014-10-08 16:54:25

标签: ios swift

我的UIViewController子类中有以下代码

class SideMenu: UIViewController {

  var contentViewController: UIViewController?

   override func shouldAutorotate() -> Bool {

        return contentViewController?.shouldAutorotate()

    }
}

但由于某种原因,我收到以下错误:

  

可选类型的价值' Bool?'没有打开;你的意思是使用'!'或者' ??'

Screenshot of above error message on the return line

我希望可选的链接可以解开可选项,但这个看起来似乎是真的吗?我错了吗?

1 个答案:

答案 0 :(得分:1)

可选链的结果是可选的。因此?.shouldAutorotate()会产生Bool?,而您的函数需要Bool。因此错误:

  

可选类型'Bool?'的值没有打开;你的意思是用'!'或'??'

错误概述了两种可能的解决方案。一种方法是使用contentViewController!.shouldAutorotate()contentViewController?.shouldAutorotate()!解包,但如果contentViewControllernil,这两种情况都会崩溃,而这不是您的想法。

另一种选择是在Bool?nil时提供后备值。有一个很好的链接运算符:??左侧是T?,右侧是T

也就是说,如果你想在contentViewController为nil时返回false,你将返回以下内容:

return contentViewController?.shouldAutorotate() ?? false

这实际上与以下代码的行为相同:

if let controller = contentViewController {
    return controller.shouldAutorotate()
} else { 
    return false
}