2014-10-08 104 views
1

我有我UIViewController子類可選鏈接無法正常運行

class SideMenu: UIViewController { 

    var contentViewController: UIViewController? 

    override func shouldAutorotate() -> Bool { 

     return contentViewController?.shouldAutorotate() 

    } 
} 

但由於某些原因,我得到以下錯誤以下代碼:

Value of optional type 'Bool?' not unwrapped; did you mean to use '!' or '??'

Screenshot of above error message on the return line

我期望可選擇的鏈接打開可選,但這不可能是真的?我錯了嗎?

+0

的功能將在contentViewController爲零的情況下返回nil,或者使返回類型爲Bool?或者使用if構造來進行測試,在contentVC = nil情況下返回false – 2014-10-08 16:58:48

回答

1

可選鏈的結果是可選的。因此?.shouldAutorotate()會產生Bool?,而您的功能需要Bool。因此錯誤:

Value of optional type 'Bool?' not unwrapped; did you mean to use '!' or '??'

有兩種可能的解決方案由錯誤概述。一種是用contentViewController!.shouldAutorotate()contentViewController?.shouldAutorotate()!打開,但如果contentViewControllernil,這兩個都會崩潰,這並不是你想到的。

另一種選擇是在您的Bool?nil時提供回退值。有一個很好的鏈接運算符:??左側爲T?,右側爲T

也就是說,如果你想返回false時contentViewController是零,你將返回以下:

return contentViewController?.shouldAutorotate() ?? false 

這實際上是相同的行爲如下面的代碼:

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

感謝您的快速響應! – fae53351b9effc708e764e871bef31 2014-10-08 17:09:37