键入强制转换类的实例

时间:2016-08-06 16:24:08

标签: ios swift

假设我有两个课程: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 ...并且因为包含了两个以上的类。

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

类型转换运算符(as?as!)是编译时运算符。 Swift中任何变量的类型都不是动态的,因为你打算用你的演员来实现。

你不能轻易避免if letguard等等。在你的情况下你可以做一个明确的演员(as!),如果你知道特定索引的视图控制器永远不会变化。但这不是推荐的方法,通常你应该避免使用显式铸造。