2015-07-26 2 views
6

Я создал приложение в XCode 6 Сегодня я скачал XCode 7 и обновил мое приложение Swift 2 Существовало много ошибок, но теперь есть только один, что.. Я не могу решить я не знаю, почему, но Xcode не нравится какой-либо Bool вариант для animated и показать эту ошибку -.Swift 2: «Bool» не конвертируется в „BooleanLiteralConvertible“

«Bool» не конвертируются в «BooleanLiteralConvertible»

(если вы посмотрите на саму функцию, вы увидите, что она занимает ровно Bool для 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' 

Кто-нибудь знает, как я могу решить эту проблему?

Спасибо.

+0

Является ли это опечатка «pageViewContorller»? – Renzo

ответ

12

Swift запутан и дает неправильное сообщение об ошибке. Проблема заключается в том, что первый параметр имеет тип [UIViewController]?, так что должно работать:

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

Или еще лучше, объявить viewControllers быть типа [UIViewController] тогда не отливка не требуется при вызове:

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

Спасибо, он отлично работает! –

1

Старайтесь избегать кастинга, если это возможно. Swift 1 declaration для - setViewControllers:direction:animated:completion: изменился с:

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

в

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

так что ваш бросок путает Swift 2, так как тип [AnyObject] из viewControllers не соответствует [UIViewController]?. Ожидайте, что больше API Objective-C будет проверяться в будущем.

Первое исправление viewControllerAtIndex для возврата UIViewController:

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

затем просто дайте Swift вывести правильные типы:

let startVC = viewControllerAtIndex(indexImage) 

let viewControllers = [startVC] 

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

который читаемый вариант:

let startVC: UIViewController = viewControllerAtIndex(indexImage) 

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

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