在 Swift 中以编程方式调用 UITabBarController 委托

Calling UITabBarController delegate programmatically in Swift

我在 Objective-C 中有一个完美的工作代码,它被调用以根据特定条件以编程方式更改所选选项卡。

-(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 代码有问题,但是有人可以帮助我理解错误吗?

是的,[AnyObject]?,它是一个可选数组,没有名为下标的成员,但 [AnyObject] 有,即您不能在可选数组上使用下标表示法,因此您必须解包它首先带有“!”。

试试这个:

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