2014-10-11 32 views
1

在我的應用程序的ViewController中,我調用了transitionFromViewController,但在將閉包傳遞給completion:參數時總是得到以下錯誤。如何在Swift中將(可選)完成處理函數閉包傳遞給transitionFromViewController?

Type '() -> Void' does not conform to protocol 'NilLiteralConvertible' 

這裏的函數調用:

self.transitionFromViewController(
     self.currentVC, 
     toViewController: newController, 
     duration: 0.2, 
     options: UIViewAnimationOptions.TransitionCrossDissolve, 
     nil, 
     completion: { finished in 
      fromViewController.removeFromParentViewController() 
      toViewController.didMoveToParentViewController(containerViewController) 
      toViewController.view.frame = containerViewController.view.bounds 
    }) 

根據代碼完成方法簽名如下:

transitionFromViewController(fromViewController: UIViewController, toViewController: UIViewController, duration: NSTimeInterval, options: UIViewAnimationOptions, animations:() -> Void(), completion: ((Bool) -> Void)?) 

回答

2

你不能傳遞零至animations宣佈爲不optional

抱器 () -> Void()

傳遞空closure如果你想

self.transitionFromViewController(
     self.currentVC, 
     toViewController: newController, 
     duration: 0.2, 
     options: UIViewAnimationOptions.TransitionCrossDissolve, 
     animations: {() -> Void in 

     }, 
     completion: { finished in 
      fromViewController.removeFromParentViewController() 
      toViewController.didMoveToParentViewController(containerViewController) 
      toViewController.view.frame = containerViewController.view.bounds 
    }) 
+0

在刪除之前,應根據文檔調用willMoveToParentViewController(nil)! – 2015-11-16 15:02:38

2

我想下面的代碼應該幫助你:哪裏,//用於動畫代碼

self.transitionFromViewController(fromViewController, toViewController: toViewController, duration: 0.1, options: UIViewAnimationOptions.CurveEaseInOut, animations: {() -> Void in 
      // code for animations 
      }) { (value: Bool) -> Void in 
      // code after completion 
     } 

- 代碼你想要的塊期間執行。 而且,//完成之後的代碼 - 您要在塊完成之後執行的代碼。

相關問題