is 나 as 연산자를 이용해서 프로토콜 준수에 대한 체크나 특정 타입으로의 캐스팅을 할 수 있습니다.
이건 타입 캐스팅에서 설명
- is 연산자는 인스턴스가 프로토콜을 준수하면 true 아니면 false를 반환
- 다운 캐스트 연산자인 as?는 프로토콜 타입의 옵셔널 값을 반환, 준수하지 않으면 nil을 반환
- 다운 캐스트 연산자인 as!는 강제로 다운 캐스팅 하고 실패할 경우 런타임 에러가 발생
HasArea라는 프로토콜을 하나 정의합니다. HasArea는 are 라는 Double 타입 gettable 프로퍼티을 단일 요구사항으로 가집니다.
HasArea 프로토콜을 준수하는 Circle 과 Country 두개의 클래스를 선언합니다.
두 클래스 모두 HasArea의 요구사항을 준수합니다.
이번에는 HasArea를 준수하지 않는 클래스를 하나 더 선언하고
그리고 프로토콜을 준수하는지 체크를 해볼건데 Circle, Country, Animal은 공통으로 공유된 클래스가 없기때문에 AnyObject 배열을 사용합니다.
[AnyObject] 타입인 objects 배열로 각 클래스가 프로토콜을 준수하는지 확인할 수 있습니다.
objects의 각 요소 object는 as? 연산자와 옵셔널 바인딩을 통해서 objectWithArea 상수로 언래핑 됩니다.
HasArea를 준수하는 프로토콜의 area 프로퍼티에 안전하게 접근할 수 있고 타입 캐스팅에 실패하게 되면 “Something that doesn’t have an area” 를 출력하게 됩니다.
'Swift > 꼬꼬무' 카테고리의 다른 글
Protocol Extensions (프로토콜 확장) (0) | 2023.07.05 |
---|---|
Optional Protocol Requirements (옵셔널 프로토콜 요구사항) (0) | 2023.07.05 |
Protocol Composition (프로토콜 혼합) (0) | 2023.07.05 |
Class-Only Protocol (0) | 2023.07.04 |
Protocol Inheritance (0) | 2023.07.04 |