2015-06-16 2 views
6

Я пытаюсь выяснить, как решить эту проблему в Swift на Xcode 7 (iOS9), и я также имею эту ошибку:Swift: не может подстроить значение типа '[UIViewController]?'

Cannot subscript a value of type '[UIViewController]?' with an index of type 'Int'

Любое предложение с благодарностью. Благодарю.

enter image description here

Мой код:

func indexPositionForCurrentPage(pageViewController: UIPageViewController) -> Int { 

    let currentViewController = pageViewController.viewControllers[0] as UIViewController 

    for (index, page) in pages.enumerate() { 
     if (currentViewController == page) { 

      return index 
     } 
    } 

    return -1 
} 

ответ

8

Try:

let currentViewController = pageViewController.viewControllers![0] 

Было бы безопаснее, хотя, чтобы написать:

if let currentViewController = pageViewController.viewControllers?[0] { 
    // ... and then do everything else in the if-block 
end 

Другой вариант:

guard let currentViewController = pageViewController.viewControllers?[0] else { 
    return 
} 
// ... and then just proceed to use currentViewController here 

Это имеет то преимущество, что это безопасно, но нет никакой необходимости, чтобы положить оставшуюся часть функции внутри if блока.

+0

Обратите внимание, что больше не нужно сбрасывать; Swift 2.0 знает, что это массив UIViewControllers! – matt

+0

Также 'pageViewController.viewControllers? .first 'избавляет вас от получения исключений из индекса за пределами. – ozgur

Смежные вопросы