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 {
init(handler: EmergencyCallHandler){
handler.delegate = self
}
func performCPR() {
print("The paramedic does chest compressions")
}
}
class Doctor: AdvancedLifeSupport {
init(handler: EmergencyCallHandler){
handler.delegate = self
}
func performCPR() {
print("The doctor does chest compression.")
}
func useStethoscope(){
print("listening for heart")
}
}
class Surgeon: Doctor {
override func performCPR() {
super.performCPR()
print("Sings staying alive by the BeeGees")
}
func useElectricDrill() {
print("Whirr...")
}
}
let emilio = EmergencyCallHandler()
let angela = Surgeon(handler:emilio)
emilio.assessSituation()
emilio.medicalEmergency()