2015-07-19 82 views
0

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

我子类的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

完全被新的斯威夫特,我找不到解释如何具体实例比较的对象,或任何材料,如果这是做所有正确的方式。

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

+0

你为什么继承UITabBarController?要做到这一点,你需要做的是实现委托方法 – Paulw11

+0

我这样做是为了能够将一些自定义样式应用到栏中。这个代码在我的例子中被编辑,因为它不相关。 –

回答

3

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

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

为了使它更安全,请参阅this answer

(使它):删除不需要的括号,这显然会给编译器带来问题:

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

你会实际收到了更多有用的错误消息的方式:

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

这将给予你一个更好的提示什么是错误的。

+0

我明白了!我将不得不查找更多的解包。谢谢! –