比较UIViewController实例

时间:2015-07-19 10:55:57

标签: ios xcode swift uiviewcontroller uistoryboard

我正在使用自定义标签栏构建应用程序。其中一个按钮不会选择相应的视图控制器,而是会触发一些自定义代码(例如模态打开)。

我使用以下内容将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来说是全新的,我找不到任何解释如何比较对象的特定实例的材料,或者这是否是正确的方法。

如何更改此代码才能使其正常工作?

1 个答案:

答案 0 :(得分:3)

首先(使其正常工作):展开self.viewControllers

if (viewController == self.viewControllers![2]) {
    return false
}

为了更安全,请参阅this answer

第二次(使其正确):删除不需要的括号,这显然会给编译器带来问题:

if viewController == self.viewControllers![2] {
    return false
}

这样您实际上会收到更有用的错误消息:

  

无法下标'[UIViewController]类型的值?'索引类型为'Int'

这会让你更好地暗示出了什么问题。