class A {
func a(){
print("a")
}
}
class B: A {
func b(){
print("b")
}
}
class C: B {
func c(){
print("c")
}
}
var a: A = A()
var b: B = B()
var c: C = C()
print(a is B) // false
print(b is A) // true
print(c is C) // true
var c: A = C() as A // 업캐스팅
// var c: C = A() as C // 오류
var a: Any = A() // as Any 생략 가능
as? 또는 as! 를 사용하여 자식 클래스의 인스턴스로 사용할 수 있도록 컴파일러에게 인스턴스의 타입정보를 전환해준다.
var a = A()
var c: A = C() as A // 업캐스팅
var b: B?
b = c as? B
b = c as? C
b = a as? B // nil
b = a as? C // nil
var a = A()
var c: A = C() as A // 업캐스팅
var b: B?
b = c as! B
b = c as! C
b = a as! B // 런타임 오류
b = a as! C // 런타임 오류