class Mom {
var home = true
var family = true
var car = true
}
class Daughter : Mom {
var youth = true
}
let mommy = Mom()
let me = Daughter()
![]() | ![]() |
타입캐스팅에는 두가지 종류가 있다. 업캐스팅과 다운캐스팅이다.
위의 코드처럼 Mom을 상속받는 Daughter라는 클래스가 있을때,
Daughter의 붕어빵을 찍어냈으나, 현재 Mom 타입을 취하고 있는 인스턴스가 있다면
다시 Daughter의 타입을 취할 수 있도록 다운캐스팅을 통해서 확장이 가능하다.
let instenceMom : Mom = Daughter()
반대로 현재 Daughter 타입인 인스턴스가, 상위 클래스인 Mom 타입을 취하게 하는것은 업캐스팅이다.
let instenceDaughter = Daughter()
두가지 방법이 존재.
① as? : type 전환이 가능한지 체크한 후 전환, 실패시 nil을 반환
② as! : 강제 전환, 실패하면 런타임 에러 발생
if let mommy = instenceMom as? Daughter {
mommy.youth
} else {
print("Type 전환 안됨")
}
let mommy2 = instenceMom as! Daughter
mommy2.youth
반대로 현재 Daughter 타입인 인스턴스가, 상위 클래스인 Mom 타입을 취하게 하는것을 의미한다.
하위 클래스가 상위클래스의 타입으로 축소하는 것이기 때문에 항상 성공하며, as 를 사용한다.
let instenceDaughter = Daughter()
let me = instenceDaughter as Mom