인스턴스의 타입을 확인하거나 자신을 다른 타입의 인스턴스인양 행세할 수 있는 방법으로 사용할 수 있다.
is와 as연산자로 값의 타입을 확인하거나 다른 타입으로 전환할 수 있다.
is 연산자를 사용하여 인스턴스가 어떤 클래스의 인스턴스인지 타입을 확인해볼 수 있다.
인스턴스가 해당 클래스의 인스턴스거나 그 자식클래스의 인스턴스라면 true를 반환하고, 그렇지 않다면 false를 반환한다.
print(A is B) //true or false
또, 메타타입 타입을 이용하여 타입을 확인할 수 있다. 메타타입 타입은 타입의 타입을 뜻한다. 타입자체가 하나의 타입으로 또 표현 가능하다는 것이다.
(.Type), 프로토콜 타입이라면 (.protocol)를 사용하여 메타타입을 표현할 수 있다.
또 (.self)를 사용하여 타입 자체를 값으로 반환 시킬 수 있다.
let stringtype: String.Type = String.self //stringType에 메타타입을 이용
someType = stringType
print(someType) //String
자식클래스보다 더 상위에 있는 부모클래스의 타입을 자식클래스의 타입으로 캐스팅한다고 해서 다운캐스팅이라고 한다.
다운캐스팅을 확신할 수 있는 경우는 캐스팅하려는 타입이 같은 타입이거나 부모클래스 타입일 경우이다.
if let actingOne: Americano = coffee as? Americano
위 코드는 "만약 coffee가 참조하는 인스턴스가 Americano타입의 인스턴스 라면 actiongOne이라는 임시 상수에 할당하라." 라는 뜻이다.
특정 타입을 지정하지 않고 여러 타입의 값을 할당할 수 있는 특별한 타입이다.