【发布时间】:2015-07-13 14:55:23
【问题描述】:
我有一个UITabBarController,其viewControllers 都实现了协议Refreshable。为什么我无法将标签栏控制器的viewControllers 属性解包为Refreshable 类型的数组?
if let tabs = self.tabBarController.viewControllers as? [Refreshable] {
// Some code
tabs[0].refresh() // refresh() is a function in Refreshable
}
没有编译错误,但if let 闭包中的代码永远不会被执行。我怎样才能正确地做到这一点?
添加:
这行得通,但我不喜欢它——我觉得我应该能够像上面那样表达这一点。
if let tabs = self.tabBarController.viewControllers as? [UIViewController] {
if tabs[0] is Refreshable {
(tabs[0] as! Refreshable).refresh()
}
}
【问题讨论】:
-
你能不能只记录
self.tabBarController.viewControllers,我怀疑它由UINavigationController而不是UIViewController组成,你可能需要做两个循环。 -
啊,不。标签栏控制器直接包含视图控制器——中间没有导航控制器。事实上,如果我测试每个标签是否
is Refreshable,代码执行(见传入问题更新)。 -
啊,你已经得到答案了,这对我来说是正确的。
-
你试过用
as! [Refreshable]强制类型转换 -
如果
?转换失败,!只会导致崩溃。
标签: ios cocoa swift cocoa-touch foundation