2016-08-06 2 views
1

두 클래스가 있다고 가정 해 봅니다 : FirstViewControllerSecondViewController.클래스의 인스턴스를 캐스팅합니다.

self.tabBarController?.viewControllers![0]은 둘 중 하나의 인스턴스 일 수 있습니다.

이 하나가 문제가되지 않습니다 :

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

어떤 제안 :

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

그러나 이것은 하나의 오류를 제공 "classOfVC는 형식이 아닙니다"?

편집 : isKindOfClass를 사용하고 싶지 않습니다. if ... else if ...를 사용하지 않으려 고합니다. 둘 이상의 클래스가 envolved이기 때문에 사용하고 싶지 않습니다.

+1

메타 타입'classOfVC'는 런타임까지는 알 수 없지만 컴파일러는'myVC'에 대한 정적 타입을 필요로합니다. 그래서 당신이하려는 것은 그다지 의미가 없습니다. 당신이 해결하려고하는 실제 문제는 무엇입니까? 이 Q & A는 관련성이 있습니다. http://stackoverflow.com/questions/38792315/class-casting-dynamically-in-swift – Hamish

답변

1

유형 캐스트 ​​연산자 (as? 또는 as!을)의 목적을 확인하는 isKindOfClass를 사용할 수 있습니다. Swift의 모든 변수 유형은 캐스트와 함께 달성하려는 동적 일 수 없습니다.

당신은 쉽게 당신이 특정 인덱스에서 해당 뷰 컨트롤러를 알고있는 경우 귀하의 경우는 명시 적 캐스트 (as!를) 할 수에서 if let, guard 등, 결코 변화하지 피할 수 없다. 그러나 권장 된 방법은 아니며 대개 명시 적 캐스팅을 사용하지 않는 경향이 있습니다.

+0

이제 이해가되었습니다. 감사! – user523234

1

당신은 시간 연산자를 컴파일되는 클래스

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

관련 문제