代理和委托回调

代理和委托回调

模拟一个学生找枪手代考的用代理
代理给我感觉像是 代理方和被代理方通过遵循同一个协议,以这个为桥梁,代理方有一个被代理方类的属性,通过这个属性可以把代理方和被代理方实现连接

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()


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • AFHTTPRequestOperationManager 网络传输协议UDP、TCP、Http、Socket、X...
    Carden阅读 4,867评论 0 12
  • 禅与 Objective-C 编程艺术 (Zen and the Art of the Objective-C C...
    GrayLand阅读 1,673评论 1 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • 不知道是因为我太要强,还是因为我总爱逞强,在每次遇到一些麻烦事的时候,不管别人问我什么,我都会说,没事,我OK的。...
    李婵亦阅读 930评论 1 1
  • 不到两年,足矣筑起心中的城,或许,越筑越高…… 小蘑菇头,一个旅行箱一个双肩包,跟珊珊踏上旅程,那是2014年的夏...
    戴上面具Smile阅读 602评论 0 1