2015-02-06 44 views
1

因此,我一直在使用默認參數值。使用UIViewController作爲可選參數的默認值,但我得到「X沒有名爲Y的成員」錯誤

class containerViewController: UIViewController { 
    var detailView:UIViewController? 

    override func viewDidLoad(){ 
     super.viewDidLoad() 
     detailView = anotherViewController() 
    } 

    func hideDetailView(vc:UIViewController? = detailView){ // <- THIS LINE 
     // code 
    } 
} 

線伊夫標記產生一個錯誤:

'containerViewController.Type' does not have a member named 'detailView' 

我一直在網上閱讀,including this question,但我似乎無法弄清楚如何解決這個問題。

我想要的是能夠使用hideDetailView(),如果我發送一個特定的視圖控制器作爲該函數的參數,它隱藏該特定的視圖控制器。如果我不發送任何參數,它只是隱藏保存在detailView參數中的當前視圖控制器。

我該如何做到這一點?

回答

1

您可以使用nil作爲默認值,並檢查正文中是否有nil

func hideDetailView(vc:UIViewController? = nil){ // <- THIS LINE 
    let vc_ = vc ?? detailView 
    // code 
} 

但是在這種情況下,你不能區分以下電話:

// passing `nil` as Optional<UIViewController> 
let vc:UIViewController? = nil 
container.hideDetailView(vc: vc) 

// use default value 
container.hideDetailView() 

如果你不喜歡,你可以使用UIViewController??

func hideDetailView(vc:UIViewController?? = nil){ 
    let vc_ /*: UIViewController? */ = vc ?? detailView 
    // code 
} 
+0

優雅的解決方案!非常感謝! – Jimmery 2015-02-06 15:07:35

相關問題