我正在使用自定义标签栏构建应用程序。其中一个按钮不会选择相应的视图控制器,而是会触发一些自定义代码(例如模态打开)。
我使用以下内容将UITabBarController子类化:
import UIKit
class MyTabBarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
delegate = self
}
func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool {
if (viewController == self.viewControllers[2]) {
return false
}
return true
}
}
然而,比较viewController == self.viewControllers[2]
似乎不起作用。我收到以下错误:
无法找到接受提供的参数的
==
的重载
对Swift来说是全新的,我找不到任何解释如何比较对象的特定实例的材料,或者这是否是正确的方法。
如何更改此代码才能使其正常工作?
答案 0 :(得分:3)
首先(使其正常工作):展开self.viewControllers
:
if (viewController == self.viewControllers![2]) {
return false
}
为了更安全,请参阅this answer
第二次(使其正确):删除不需要的括号,这显然会给编译器带来问题:
if viewController == self.viewControllers![2] {
return false
}
这样您实际上会收到更有用的错误消息:
无法下标'[UIViewController]类型的值?'索引类型为'Int'
这会让你更好地暗示出了什么问题。