比较 UIViewController 实例

Comparing UIViewController instances

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

我将 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]似乎不​​起作用。我收到以下错误:

Could not find an overload for == that accepts the supplied arguments

作为 Swift 的新手,我找不到任何 material 来解释如何比较对象的特定实例,或者这是否是正确的方法。

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

首先(使其工作):打开 self.viewControllers:

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

为了更安全,见

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

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

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

Cannot subscript a value of type '[UIViewController]?' with an index of type 'Int'

这会给你更好的提示是哪里出了问题。