2015-07-26 12 views
6

ho creato un app in XCode 6 Oggi ho scaricato XCode 7 e aveva aggiornato la mia app per Swift 2 C'erano un sacco di errori, ma ora c'è solo uno che.. non riesco a risolvere non so perché, ma Xcode non piace nessuna opzione Bool per animated e mostrare questo errore -.Swift 2: "Bool' non è convertibile in 'BooleanLiteralConvertible'

'Bool' non è convertibile in 'BooleanLiteralConvertible'

(se si guarda alla funzione stessa, si vedrà, che si prende esattamente la Bool per animated)

var startVC = self.viewControllerAtIndex(indexImage) as ContentViewController 
var viewControllers = NSArray(object: startVC) 

self.pageViewContorller.setViewControllers(viewControllers as [AnyObject], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil) 
    'Bool' is not convertible to 'BooleanLiteralConvertible' 

Qualcuno sa, come posso risolverlo?

Grazie.

+0

E ' un errore "pageViewContorller"? – Renzo

risposta

12

Swift è confuso e ti dà un messaggio di errore errato. Il problema è che il primo parametro è di tipo [UIViewController]?, quindi il seguente dovrebbe funzionare:

self.pageViewContorller.setViewControllers(viewControllers as? [UIViewController], direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil) 

O, meglio ancora, dichiarare viewControllers essere di tipo [UIViewController] allora nessun fusione è necessaria la chiamata:

let viewControllers:[UIViewController] = [startVC] 
self.pageViewContorller.setViewControllers(viewControllers, direction: UIPageViewControllerNavigationDirection.Forward, animated: true, completion: nil) 
+0

Grazie, funziona perfettamente! –

1

Cerca di evitare il casting, se possibile. La Swift 1 declaration per - setViewControllers:direction:animated:completion: è cambiato da:

func setViewControllers(_ viewControllers: [AnyObject]!, 
      direction direction: UIPageViewControllerNavigationDirection, 
      animated animated: Bool, 
     completion completion: ((Bool) -> Void)!) 

a

func setViewControllers(viewControllers: [UIViewController]?, 
      direction: UIPageViewControllerNavigationDirection, 
      animated: Bool, 
     completion: ((Bool) -> Void)?) 

così il cast confonde Swift 2 perché il tipo di [AnyObject]viewControllers non corrisponde [UIViewController]?. Aspettatevi più API Objective-C da verificare in futuro.

primo fix viewControllerAtIndex per restituire un UIViewController:

func viewControllerAtIndex(index: Int) -> UIViewController { 
    ... 
} 

poi lasciare che Swift inferire i tipi corretti:

let startVC = viewControllerAtIndex(indexImage) 

let viewControllers = [startVC] 

pageViewController.setViewControllers(viewControllers, 
    direction: .Forward, animated: true, completion: nil) 

che è la versione leggibile di:

let startVC: UIViewController = viewControllerAtIndex(indexImage) 

let viewControllers: [UIViewController] = 
    Array<UIViewController>(arrayLiteral: startVC) 

pageViewController.setViewControllers(viewControllers, 
    direction: UIPageViewControllerNavigationDirection.Forward, 
    animated: true, completion: nil) 
Problemi correlati