2015-01-20 4 views
0

У меня есть отлично работающий код в объективе-c, который вызывается для изменения выбранной вкладки программно на основе определенных критериев.Вызов делегата UITabBarController программно в Swift

-(void)loadNewView 
{ 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    [tabBarController setSelectedIndex:2]; 
    [tabBarController.delegate tabBarController:tabBarController didSelectViewController:[tabBarController.viewControllers objectAtIndex:2]]; 
} 

Я пытаюсь получить эквивалент того же самого в Swift и ниже код, который я попробовал

func loadNewView() { 
    var tabbarController: UITabBarController = self.window?.rootViewController as UITabBarController 
    tabbarController.selectedIndex = 2 
    var svc = tabbarController.viewControllers[2] as UINavigationController 
    tabbarController.delegate?.tabBarController(tabbarController, didSelectViewController:svc) 
} 

Однако я набираюсь «[AnyObject]? Не имеет член с именем нижний индекс». Я знаю, что что-то не так с вышеуказанным кодом Swift, но может кто-нибудь помочь мне понять ошибку?

ответ

1

Yup, [AnyObject] ?, который является необязательным массивом, не имеет члена с индексом, но [AnyObject], т. Е. Вы не можете использовать нотацию индекса в необязательном массиве, поэтому вам нужно развернуть его сначала с "!".

Попробуйте это:

var svc = tabbarController.viewControllers![2] as UINavigationController 
+0

Спасибо. Я знал, что это как-то связано с распаковкой, но я не мог погладить ее. – iSee