본문 바로가기

Swift/꼬꼬무

Checking for Protocol Conformance (프로토콜 준수 검사)

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” 를 출력하게 됩니다.