假设我有两个课程:FirstViewController
和SecondViewController
。
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 ...并且因为包含了两个以上的类。
答案 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 let
,guard
等等。在你的情况下你可以做一个明确的演员(as!
),如果你知道特定索引的视图控制器永远不会变化。但这不是推荐的方法,通常你应该避免使用显式铸造。