Type Casting
- Type Casting: 인스턴스의 타입을 확인하거나 인스턴스를 같은 계층에 있는 슈퍼클래스나 서브 클래스로 취급하는 방법
- is: 타입을 체크하는 연산자, Type와 동일하거나 서브클래스인경우 같다고 여긴다
- as: 업캐스팅, 다운캐스팅
- as?: 옵셔널값
- as!: 강제추출
class Human{
let name:String
init(name: String){
self.name = name
}
}
class Man:Human{}
class Woman:Human{}
let lee: Man = .init()
lee is Man //true
lee is Human //true
let people:[Human] =[
Man.init(name:"lee")
Woman.init(name:"kim")
Man.init(name:"cho")
] //업캐스팅: Human타입인데 Man, Woman이 들어가는것
//as를 사용해서 Man상위클래스인 Human으로 업캐스팅 하겠드는뜻
//업캐스팅은 항상 성공하기때문에 as써도댐
let human = Woman.init() as Human
//상위프로퍼티와 하위 프로퍼티 같으면 접근가능
//하위클래스에만있는 프로퍼티면 접근 불가
//다운캐스팅: human을 하위클래스인 Woman으로 다운캐스팅
//하위프로퍼티 접근가능
let girl: Woman = human as? Woman
//as? 사용하는이유
let boy: Man = human as! Man //오류
//human은 Woman을 업캐스팅 한건데 Man으로 다운캐스팅을
//해서 다운캐스팅을 실패해서 오류가난다
//그래서 as?를 사용한다
댓글