인스턴스의 타입
을 확인하거나, 해당 인스턴스를 슈퍼클래스
나 하위 클래스
로 취급하는 방법이다.
swift
에서 타입 캐스팅은 is
나 as
연산자로 구현한다.
타입 캐스팅을 사용하여 타입이 프로토콜에 적합한지 여부도 확인할 수 있다.
is
연산자는 타입을 체크
하는 연산자로서, 반환값은 bool
형이다.
표현식 is 자료형
동일
하거나, 표현식이 자료형의 서브클래스
인 경우에 true
false
class Human{}
class Teacher : Human{}
let teacher : Teacher = .init()
teacher is Teacher // True
teacher is Human // True
class Human {
let name: String
init(name: String) {
self.name = name
}
}
class Teacher: Human { }
class Student: Human { }
let people: [Human] = [
Teacher.init(name: "김선생"),
Student.init(name: "박제자"),
Student.init(name: "유제자")
]
swift
이지만, 업캐스팅
으로 인하여 Teacher
와 Student
자료형을 저장할 수 있다.Teacher
와 Student
의 슈퍼클래스가 Human
으로 동일하기에, Human
이란 클래스로 둘다 업캐스팅한 것이다.for human is people{
if human is Teacher{
print("Teacher")
}else if human is Student{
print("Student")
}
}
표현식 as (변환 할)자료형
표현식 as? (변환 할)자료형
표현식 as! (변환 할)자료형
표현식
의 자료형이 변환할 자료형과 호환된다면, 변환할 자료형으로 캐스팅된 인스턴스를 리턴한다.업캐스팅
과 다운캐스팅
에서 사용한다.Any
와 AnyObject
자료형을 사용할 경우, 상속 관계가 아니어도 예외적으로 사용할 수 있다.슈퍼클래스의 자료형
으로 참조한다.항상 성공
한다.as
연산자를 사용해서 할 수도 있다. ( 컴파일 시점에 캐스팅 가능 여부를 결정한다 )
class Human {
let name: String = "Sodeul"
}
class Teacher: Human {
let subject: String = "English"
}
class Student: Human {
let grade: Int = 1
}
let human = Teacher.init() as Human