사전에는 "위임하다" 라는 뜻을 가지고 있다.
일단 위임하다 라는것만 알고 코드를 보면서 알아보자.
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로 선언하는 이유는 강한 참조를 피하기 위함!