协议protocol的作用

39 阅读1分钟

协议的作用就是把重复的事情抽取出来,以后任何类型只要遵守协议,都可以使用。

如果没有协议,类似的代码需要重复写。

struct Car {
    func drive() {
        print("🚗 Car is driving")
    }
}

struct Bike {
    func drive() {
        print("🚲 Bike is riding")
    }
}

// 分别写两个函数
func testDriveCar(_ car: Car) {
    car.drive()
}

func testDriveBike(_ bike: Bike) {
    bike.drive()
}

let car = Car()
let bike = Bike()

testDriveCar(car)
testDriveBike(bike)

可以看到,定义了两个结构体,分别写了两个函数,建立了两个实例。

protocol Drivable {
    func drive()
}

struct Car: Drivable {
    func drive() {
        print("🚗 Car is driving")
    }
}

struct Bike: Drivable {
    func drive() {
        print("🚲 Bike is riding")
    }
}

func testDrive(_ vehicle: Drivable) {
    vehicle.drive()
}

let car = Car()
let bike = Bike()

testDrive(car)
testDrive(bike)

通过定义protocol,让两个结构体都遵循这个协议,只用一个函数,让函数参数遵循这个协议,就省去了再写一个函数的麻烦,毕竟另一个函数基本上都是重复工作。