사전에는 "위임하다" 라는 뜻을 가지고 있다.
일단 위임하다 라는것만 알고 코드를 보면서 알아보자.
import Foundation
protocol AdvancedLifeSupport {
func performCPR()
}
class EmergencyCallHandler {
var delegate: AdvancedLifeSupport?
func assessSituation() {
print("Can you tell me what happened")
}
func medicalEmergency() {
delegate?.performCPR()
}
}
struct Paramedic: AdvancedLifeSupport {
func performCPR() {
print("The paramedic does chest compressions, per 30 sec")
}
init(handler: EmergencyCallHandler) {
handler.delegate = self
}
}
let emilio = EmergencyCallHandler()
let pete = Paramedic(handler: emilio)
emilio.assessSituation()
emilio.medicalEmergency()
AdvancedLifeSupport라는 프로토콜을 선언해 준다.
EmergencyCallHandler에 delegate(위임자)를 선언해준다.
Paramedic은 프로토콜 안에 있는 performCPR을 구현해주고
EmergencyCallHandler의 delegate를 자기 자신 Paramedic 즉 self로 할당해준다.
후에 EmergencyCallHandler에 delegate를 통해 performCPR()을 실행하면
메서드를 호출하는것은 EmergencyCallHandler이지만 실행은 Paramedic에서 하게 된다.
delegate를 weak var로 선언하는 이유는 강한 참조를 피하기 위함!