클래스, 구조체, 열거형이 프로토콜을 채택했을 때, 프로토콜에서 요구한 사항에 대해 구현해야 한다.
프로토콜을 통해 공통적인 작업을 강제 할수 있다.
실제 구현은 Class, Struct, Enum에서 한다.
프로토콜을 타입처럼 사용 가능하다.
If a protocol requires a property to be gettable and settable, that property requirement can’t be fulfilled by a constant stored property or a read-only computed property. If the protocol only requires a property to be gettable, the requirement can be satisfied by any kind of property, and it’s valid for the property to be also settable if this is useful for your own code.
Example
Delegate
클래스나 구조체에서 할 일의 일부를 다른 인스턴스에게 대신 하게 하는 디자인 패턴
Sample code 01. UITableView
UITableViewDelegate 프로토콜 선언
UITableView 클래스에 delegate 프로퍼티 생성
UITableView는 View 스스로가 결정할 수 없는 부분을 ViewController에게 위임하고자 한다. (ex. cellForRowAt)
따라서 UITableViewDelegate 프로토콜을 채택한 인스턴스를 저장할 delegate 프로퍼티를 갖고 있다.
구현부
ViewController에서 UITableViewDelegate 프로토콜을 채택 →
ViewController는 UITableViewDelegate 프로토콜이 강제하는 메소드를 모두 정의 →
UITableView 의 인스턴스인 tableView 생성 →
tableView의 delegate에 자신(ViewController)을 대입
Sample code 02. Custom View
CustomViewDelegate 프로토콜 생성
스위치의 value change에 따라 뷰의 프로퍼티를 변환시킬 메소드 정의
UIView인 CustomView 클래스에 delegate 정의
var delegate: CustomViewDelegate?
switch가 isOn이면 delegate?.didSwitchedCustomView(self) 실행
switch가 isOff이면 delegate?.didDeSwitchedCustomView(self) 실행