我以前在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并且没有出现控制台错误
答案 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]