2015-07-26 11 views
6

Ich habe eine App in XCode 6 Heute habe ich heruntergeladen XCode 7 und es war meine App Swift 2 aktualisiert Es gibt viele Fehler aufgetreten sind, aber jetzt gibt es nur einen, dass.. ich kann es nicht lösen ich weiß nicht, warum, aber Xcode mag es nicht, jede Bool Option für animated und diesen Fehler zeigen -.Swift 2: „Bool‘ ist nicht konvertierbar ‚BooleanLiteralConvertible‘

‚Bool‘ ist nicht konvertierbar ‚BooleanLiteralConvertible‘

(wenn man sich die Funktion selbst, werden Sie sehen, dass es genau die Bool für animated nimmt)

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' 

jemand kennt, wie kann ich es lösen?

Danke.

+0

Ist es ein Tippfehler "pageViewContorller"? – Renzo

Antwort

12

Swift ist verwirrt und gibt Ihnen eine falsche Fehlermeldung. Das Problem ist, dass die ersten Parameter vom Typ [UIViewController]?, so sollte folgende Arbeiten:

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

Oder noch besser erklären viewControllers vom Typ seine [UIViewController] dann kein Casting im Aufruf benötigt wird:

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

Danke, es funktioniert perfekt! –

1

Versuchen Sie, Gießen zu vermeiden, wenn möglich. Der Swift 1 declaration für - setViewControllers:direction:animated:completion: hat dich geändert von:

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

zu

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

so Ihr Guss verwirrt Swift 2, weil der Typ [AnyObject] von viewControllers nicht [UIViewController]? entspricht. Erwarten Sie, dass in Zukunft weitere Objective-C-APIs auditiert werden.

First Fix viewControllerAtIndex zurückzukehren eine UIViewController:

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

dann lassen Sie einfach Swift die richtigen Typen ableiten:

let startVC = viewControllerAtIndex(indexImage) 

let viewControllers = [startVC] 

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

, die die lesbare Version ist:

let startVC: UIViewController = viewControllerAtIndex(indexImage) 

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

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