Protocols
프로토콜은 메소드, 프로퍼티 그리고 특정요구사항에 대한 기능을 정의하는 청사진 같은 역할을 한다.
Property Requirements
프로토콜에서는 프로퍼티가 저장되었는지 계산된 프로퍼티인지 명시하지 않는다. 다만 요구된 프로퍼티의 이름과 타입을 명시한다. 프로토콜의 요구사항은 항상 변수 프로퍼티로 선언되어 있고 이는 var키워드로 나타낸다. gettable하거나 settable한 프로퍼티는 타입 설정시 {get set}을 타입선언 뒤에 해준다. 프로퍼티 사용 시 static키워드를 항상 요구한다.
Method Requirements
프로토콜에서는 필수 인스턴스 메소드와 타입 메소드를 명시할 수 있다.
Mutating Method Requirements
가끔은 메소드의 인스턴스를 수정 할 필요가 있다. 수정이 가능하면 mutating키워드를 사용해 func앞에 위치시킨다.
Initializer Requirements
프로토콜에서 이니셜라이저를 지정할 수 있다. 특정 이니셜라이저가 필요하다고 명시되어있으면 required키워드를 붙혀 줘야한다.
Protocols as Types
프로토콜도 하나의 타입으로 사용된다. 타입사용이 허용되는 곳에 프로토콜을 사용할 수 있다.