代理和委托回调
模拟一个学生找枪手代考的用代理
代理给我感觉像是 代理方和被代理方通过遵循同一个协议,以这个为桥梁,代理方有一个被代理方类的属性,通过这个属性可以把代理方和被代理方实现连接
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的对象才执行下面这些代码
//也就是说他本身是无法单独执行这个方法的
if let stu = target {
print("姓名: \(stu.name)")
print("奋笔疾书答案")
print("提交试卷")
}
}
}
let stu = LazyStudent(name: "王大锤")
let gun = Gunman(name: "骆昊")
gun.target = stu
gun.answerTheQuestion()
委托回调
委托方没有实行写答案的方法 方法由被委托方执行,相当于是
协议里面有方法但没执行-->被委托方(执行协议里面的方法)
||
委托方(有一个遵从协议的属性)
||
委托方通过属性调用协议里面的方法实现自己想做的事
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()