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

前端之家收集整理的这篇文章主要介绍了swift 快速奔跑的兔几 本节的内容是:协议和委托前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

举一个简单的栗子来说明协议和委托:(做为吃货就来说个吃东西的栗子)
比如说,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()
原文链接:https://www.f2er.com/swift/325560.html

猜你在找的Swift相关文章