加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift 快速奔跑的兔几 本节的内容是:协议和委托

发布时间:2020-12-14 01:41:29 所属栏目:百科 来源:网络整理
导读:协议可以看作是一个类的需求清单。定义协议,就是定义一个被需要的属性和方法的清单。那么遵守这个协议的类就必须拥有这个协议所定义的属性和方法。 协议的定义不提供任何实际的代码,只是定义了存在哪些属性和函数,以及如何访问它们。 总的来说就是:协议

协议可以看作是一个类的需求清单。定义协议,就是定义一个被需要的属性和方法的清单。那么遵守这个协议的类就必须拥有这个协议所定义的属性和方法。
协议的定义不提供任何实际的代码,只是定义了存在哪些属性和函数,以及如何访问它们。
总的来说就是:协议指定需要一个类做什么,而如何做,由类自己来完成。
关于协议的应用,典型的就是委托:一个类将自己需要的某些功能交付给另一个类去完成。

举一个简单的栗子来说明协议和委托:(做为吃货就来说个吃东西的栗子)
比如说,rabbit类饿了,它需要吃东西:mushroom,可是rabbit自己并没有mushroom。所以,rabbit类就需要有一个代理属性rabbitDinnerDelegate,通过代理(相当于是rabbit的厨师)来获得mushroom~当然啦,其实rabbit自己也可以跑去园子里摘蘑菇,可是在编程过程中,为了提高代码的重用性,我们更加喜欢饭来张口的感觉(通过代理,我们可以方便的使用xcode中很多封装的方法和属性,省去了我们大量的工作,我们都是可以吃到现成mushroom的rabbit)。
这时候,就需要有一个协议protocol getMushroom{func returnMushroom(rabbit) -> mushroom},这个协议中定义一个方法returnMushroom,对于如何实现该方法(mushroom到底是买来的还是跑到花园里摘来的还是从别人那里抢来的),协议并不关心也无需定义,但是对于输入参数(必须是一只兔子)和返回结果(得到了mushroom),协议需要定义。
有了协议,兔子的愿望就可以满足了,但是还需要有一个实在的类(比如说RabbitDinnerDelegate)来实际完成(继承,或者更严谨些,遵守协议)这个协议:class RabbitDinnerDelegate:getMushroom{func returnMushroom(rabbit) -> mushroom{…}}。RabbitDinnerDelegate就负责,如何得到蘑菇的任务。并将蘑菇返回给rabbit。
之后rabbit类要做的就是:
定义一个属性:dinnerDelegate = RabbitDinnerDelegate()
调用dinnerDelegate的方法returnMushroom,就得到了蘑菇~开星~

下面是代码的栗子:

import UIKit

// delegate TEST
protocol HouseSecurityDelegate {
    func handleIntruer()
}

class House {
    var delegate : HouseSecurityDelegate?
    func burglarDetected(){
        delegate?.handleIntruer()
    }
}

class GuardDog : HouseSecurityDelegate {
    func handleIntruer() {
        print("releasing the Hounds!")
    }
}

let theHounds = GuardDog()
let myHouse = House()
myHouse.delegate = theHounds
myHouse.burglarDetected()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读