반응형
as로 upcasting
상속 관계가 있는 클래스들끼리만 타입 캐스팅 가능
스위프트 코드를 작성하다 보면 컴파일러가 특정 타입의 값을 식별할 수 없는 경우가 발생할 수 있음
이것은 애매모하거나 기대하지 않은 타입의 값이 메서드 또는 함수 호출에서 반환될 때 종종 발생
이런 경우에 as 연산자를 이용한 타입 변환(type casting)
- 자식인스턴스 as 부모클래스 // upcasting 안전한 캐스팅, 자식이 추상화됨
- 업캐스팅은 특정 클래스의 객체를 상위 클래스의 객체로 형 변환
- UIButton은 UIControl의 하위 클래스이므로 다음과 같이 안전하게 형 변환
- let myButton : UIButton = UIButton()
- let mtControl = myButton as UIControl // 자식인스턴스 as 부모 클래스
- 자식인스턴스인 myButton을 부모 클래스형으로 형 변환
as! as?로 downcasting
다운캐스팅은 어떤 클래스에서 다른 클래스로 변환할 때 안전한 변환을 보장할 수 없으며, 컴파일러가 유효하지 않은 변환 시도를 잡아낼 수도 있음
다운캐스팅에서 유효하지 않은 형 변환이 이뤄졌는데 컴파일러가 에러를 잡지 않았다면, 런타임에서 에러가 발생
다운 캐스팅은 주로 자식 클래스들 중에 하나로 변환하는 데 사용
성공 확신이 있으면 as! 키워드를 사용하며 강제 변환(forced conversion)
- 변환이 안되면 crash
성공 확신이 없으면 as?를 사용하여 안전하게 변환
- 변환이 안되면 nil을 리턴하므로 옵셔널 타입으로 변환함
- 부모인스턴스 as! 자식 클래스 // downcasting 일반 타입으로 반환, 다운캐스팅이 반드시 성공할 것이라는 확신이 있을 때
- 부모인스턴스 as? 자식 클래스 // downcasting 옵셔널 타입으로 반환, 오류 가능성 있을 경우
반응형
'Swift 문법' 카테고리의 다른 글
스위프트 클로저 (swift closures) 알아보기 4 (0) | 2020.09.10 |
---|---|
swift filter, map, reduce 스위프트 필터,맵,리듀스 이용하기! (2) | 2020.09.10 |
스위프트 클로저 (swift closures) 알아보기 3 (0) | 2020.08.18 |
스위프트 클로저 (swift closures) 알아보기 2 (0) | 2020.08.17 |
스위프트 클로저 (swift closures) 알아보기 1 (0) | 2020.08.13 |