2016-08-06 76 views
1

假設我有兩個類:FirstViewControllerSecondViewController類型轉換類的實例

self.tabBarController?.viewControllers![0]可以是來自這兩者之一的實例。

這一次是沒有問題的:

let firstVC = self.tabBarController?.viewControllers![0] as! FirstViewController 

但這一次給出了錯誤 「classOfVC不是一個類型」:

let aVC = self.tabBarController?.viewControllers![0]   
    let classOfVC = object_getClass(aVC)  
    let myVC = aVC as! classOfVC 

有什麼建議?

編輯:我不想使用isKindOfClass,因爲我試圖避免使用if ... else if ...並且因爲存在兩個以上的類envolved。

+1

元類型'classOfVC'直到運行時才知道,但編譯器需要'myVC'的靜態類型,這就是爲什麼你試圖做的沒有多大意義。你試圖解決的實際問題是什麼?這個問答可能是相關的:http://stackoverflow.com/questions/38792315/class-casting-dynamically-in-swift – Hamish

回答

1

類型轉換操作符(as?as!)是編譯時操作的對象。 Swift中任何變量的類型都不能像你打算通過演員達到動態一樣動態變化。

你不能輕易的避開if letguard等。在你的你的情況,你可以做一個明確的轉換(as!),如果你知道在特定的索引視圖控制器永遠不會改變。但這不是建議的方法,通常你應該傾向於避免使用明確的轉換。

+0

它現在有道理。謝謝! – user523234

1

您可以使用isKindOfClass來檢查其類

let aVC = self.tabBarController?.viewControllers![0] 
if avc.isKindOfClass(FirstViewController) { 
    //type of first ViewController 
} 
else if avc.isKindOfClass(SecondViewController) { 
    //type of second ViewController 
} 
+0

我想避免使用if ... else if ...請參閱我的編輯。 – user523234

+0

我最終使用isKindOfclass。 – user523234