2015-07-19 50 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

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