[swift2] 타입변환 연산자 (is, as, as?, as!)

Swift 2015. 10. 18. 02:52

이 글은 애플 Language Reference 문서를 참고하여 작성하였습니다.

  • 4개의 타입캐스팅 연산자가 있습니다.
  • is 연산자, as 연산자, as? 연산자, as! 연산자.


is 연산자

  • 런타임에 표현식이 특정 타입으로 다운캐스팅 될수 있는지 검사합니다.
  • 특정 타입으로 다운캐스팅이 가능하면true, 그렇지 않으면 false를 반환합니다.


as 연산자

  • 컴파일 타임에 업캐스팅 또는 브리징과 같이 타입변환이 항상 성공하는 경우에 타입변환을 수행합니다.
  • 업캐스팅(upcasting)은 중간변수 없이 표현식을 타입의 수퍼타입 인스턴스처럼 사용할수 있게합니다.
func f(any: Any) { print("Function for Any") }
func f(int: Int) { print("Function for Int") }
let x = 10
f(x)
// "Function for Int" 출력

let y: Any = x
f(y)
// "Function for Any" 출력

f(x as Any)
// "Function for Any" 출력
  • 브리징(bridging)은 새 인스턴스를 생서하지 않고도, String과 같은 표준라이브러리 타입 표현식을 NSString과 같은 파운데이션 타입으로 사용할 수 있게합니다.


as? 연산자

  • 표현식을 특정타입으로 조건부 타입변환을 수행합니다.
  • as? 연산자는 특정 타입의 옵셔널을 반환합니다.
  • 타입변환이 성공하면 표현식의 값은 옵셔널 타입으로 랩핑되어 반환됩니다. 실패하면 nil을 반환합니다.
  • 특정 타입으로 타입변환이 실패 또는 성공으로 보장되면 컴파일 타임 에러가 발생합니다.


as! 연산자

  • 표현식을 특정 타입으로 강제 타입변환을 수행합니다.
  • as! 연산자는 옵셔널 타입이 아닌 특정 타입의 값을 반환합니다.
  • 타입변환이 실패하면, 런타임 에러가 발생합니다.
  • x as! T 는 (x as? T)! 과 동일하게 동작합니다.