有如下例子,
protocol Drivable {
func drive()
}
struct Car: Drivable {
func drive() {
print("Car is driving")
}
}
func testDrive(_ vehicle: Drivable) {
vehicle.drive()
}
let myCar = Car()
testDrive(myCar) // 输出:Car is driving
这个例子是想说明:协议可以当作函数参数的类型来使用,也就是说,函数也可以接受任何“遵守这个协议”的对象。
以上面这个例子为例:
一、
首先,定义了一个协议,这个协议叫做Drivable,任何类型(结构体、类等)只要“遵守Drivable协议”,就必须实现一个drive()的方法。
二、
定义一个结构体Car,它遵守了这个协议:Car结构体遵守了Drivable,所以它实现了drive()方法。
三、
定义一个函数,参数类型是Drivable:这个函数的参数vehicle是Drivable类型,意思是:任何遵守了Drivable协议的类型都可以穿进来。
四、
实际调用:myCar是一个Car类型,它遵守了Drivable,所以可以作为参数传给testDrive函数。