인스턴스의 타입을 확인하거나, 해당 인스턴스를 슈퍼클래스나 하위 클래스로 취급하는 방법이다.
swift에서 타입 캐스팅은 is나 as 연산자로 구현한다.
타입 캐스팅을 사용하여 타입이 프로토콜에 적합한지 여부도 확인할 수 있다.
is연산자는 타입을 체크하는 연산자로서, 반환값은 bool형이다.
표현식 is 자료형
동일하거나, 표현식이 자료형의 서브클래스인 경우에 truefalseclass 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