如何使用Swift访问tabBarController中的ObjectAtIndex?

时间:2014-08-19 20:55:00

标签: ios swift uitabbarcontroller viewcontroller

我以前在obj-c中说过

[self.tabBarController.viewControllers objectAtIndex:1];

但现在在swift中没有ObjectAtIndex了

self.tabBarController.viewControllers.ObjectAtIndex

更新

好吧我会简单的让我们考虑一下tabBarController它包含2个对象 [FirstViewController,SecondViewController] 我试图在对象之间建立一个委托 这是设置委托的代码

var Svc:SecondViewController = self.tabBarController.viewControllers[1] as SecondViewController!
Svc.delegate = self

当我运行时,我收到此错误0x1064de80d:movq%r14,%rax并且没有出现控制台错误

2 个答案:

答案 0 :(得分:21)

您的代码没问题:

var svc:SecondViewController = self.tabBarController.viewControllers[1] as SecondViewController!
svc.delegate = self

...但是你可以在结尾处省略!标记和:SecondViewController类型定义,因为它可以由演员推断:

var svc = self.tabBarController.viewControllers[1] as SecondViewController

问题出现是因为您尝试转换为错误的类。 尝试打印以调试[1]处对象类的日志名称;在演员表之前添加此项以检查班级名称:

let vcTypeName = NSStringFromClass(self.tabBarController.viewControllers[1].classForCoder)
println("\(vcTypeName)")

<强>更新

正如我们在评论中指出的那样,您应该将收到的视图控制器转换为UINavigationController

var nc = self.tabBarController.viewControllers[1] as UINavigationController

稍后您可以检查nc.viewControllers属性并查看其topViewController是否为SecondViewController

if nc.topViewController is SecondViewController {
    var svc = nc.topViewController as SecondViewController
    // your code goes here
}

答案 1 :(得分:3)

您在swift中不需要objectAtIndex,只需使用subscript运算符:

self.tabBarController.viewControllers[1]