我的UIViewController子类中有以下代码
class SideMenu: UIViewController {
var contentViewController: UIViewController?
override func shouldAutorotate() -> Bool {
return contentViewController?.shouldAutorotate()
}
}
但由于某种原因,我收到以下错误:
可选类型的价值' Bool?'没有打开;你的意思是使用'!'或者' ??'
我希望可选的链接可以解开可选项,但这个看起来似乎是真的吗?我错了吗?
答案 0 :(得分:1)
可选链的结果是可选的。因此?.shouldAutorotate()
会产生Bool?
,而您的函数需要Bool
。因此错误:
可选类型'Bool?'的值没有打开;你的意思是用'!'或'??'
错误概述了两种可能的解决方案。一种方法是使用contentViewController!.shouldAutorotate()
或contentViewController?.shouldAutorotate()!
解包,但如果contentViewController
为nil
,这两种情况都会崩溃,而这不是您的想法。
另一种选择是在Bool?
为nil
时提供后备值。有一个很好的链接运算符:??
左侧是T?
,右侧是T
。
也就是说,如果你想在contentViewController为nil时返回false,你将返回以下内容:
return contentViewController?.shouldAutorotate() ?? false
这实际上与以下代码的行为相同:
if let controller = contentViewController {
return controller.shouldAutorotate()
} else {
return false
}