代理和委托回調(diào)
模擬一個學(xué)生找槍手代考的用代理
代理給我感覺像是 代理方和被代理方通過遵循同一個協(xié)議脚猾,以這個為橋梁,代理方有一個被代理方類的屬性锯厢,通過這個屬性可以把代理方和被代理方實(shí)現(xiàn)連接
protocol ExamCandidate: class {
func answerTheQuestion()
}
class LazyStudent: ExamCandidate {
var name: String
init(name: String) {
self.name = name
}
func answerTheQuestion() {
}
}
class Gunman: ExamCandidate {
var name: String
//建立一個被代理方的屬性
var target: LazyStudent?
init(name: String) {
self.name = name
}
func answerTheQuestion() {
//意思是如果這里有一個LazyStudent的對象才執(zhí)行下面這些代碼
//也就是說他本身是無法單獨(dú)執(zhí)行這個方法的
if let stu = target {
print("姓名: \(stu.name)")
print("奮筆疾書答案")
print("提交試卷")
}
}
}
let stu = LazyStudent(name: "王大錘")
let gun = Gunman(name: "駱昊")
gun.target = stu
gun.answerTheQuestion()
委托回調(diào)
委托方?jīng)]有實(shí)行寫答案的方法 方法由被委托方執(zhí)行枯冈,相當(dāng)于是
協(xié)議里面有方法但沒執(zhí)行-->被委托方(執(zhí)行協(xié)議里面的方法)
||
委托方(有一個遵從協(xié)議的屬性)
||
委托方通過屬性調(diào)用協(xié)議里面的方法實(shí)現(xiàn)自己想做的事
protocol ExamDelegate: class {
func answerTheQuestion()
}
class LazyStudent {
var name: String
weak var delegate: ExamDelegate?
init(name: String) {
self.name = name
}
func joinExam() {
print("姓名: \(name)")
delegate?.answerTheQuestion()
}
}
class Gunman: ExamDelegate {
func answerTheQuestion() {
print("奮筆疾書各種答案")
}
}
let stu = LazyStudent(name: "王大錘")
let gun = Gunman()
stu.delegate = gun
stu.joinExam()