在 Swift 中,与 Java 的接口和 Objective-C 的协议等价的概念是协议(Protocol)。协议在 Swift 中扮演着非常重要的角色,它定义了一组要求,用于指定类、结构体或枚举类型必须遵守的一些方法、属性和其他成员。
协议的定义非常简单,使用关键字 protocol,后跟协议的名称。协议中可以定义方法、属性、下标、初始化器和关联类型等。一个类、结构体或枚举类型可以通过遵守协议来实现协议中定义的要求。接下来,我们将通过一个案例代码来说明协议在 Swift 中的使用。swift// 定义一个协议protocol Vehicle { var numberOfWheels: Int { get } func start() func stop()}// 实现协议的类class Car: Vehicle { let numberOfWheels = 4 func start() { print("Car starts.") } func stop() { print("Car stops.") }}class Motorcycle: Vehicle { let numberOfWheels = 2 func start() { print("Motorcycle starts.") } func stop() { print("Motorcycle stops.") }}// 使用协议func drive(vehicle: Vehicle) { vehicle.start() vehicle.stop()}// 创建对象并调用方法let car = Car()let motorcycle = Motorcycle()drive(vehicle: car) // 输出:Car starts. Car stops.drive(vehicle: motorcycle) // 输出:Motorcycle starts. Motorcycle stops.定义和实现协议在上面的案例中,我们首先定义了一个名为 Vehicle 的协议。该协议要求遵守者必须具有一个名为 numberOfWheels 的只读属性,以及 start() 和 stop() 两个方法。我们接着定义了两个类:Car 和 Motorcycle。这两个类分别实现了 Vehicle 协议,并提供了必需的属性和方法。Car 类具有 4 个轮子,而 Motorcycle 类具有 2 个轮子。使用协议在主函数中,我们定义了一个名为 drive 的函数,它接受一个遵守 Vehicle 协议的对象作为参数。这个函数内部调用了遵守者的 start() 和 stop() 方法。我们接着创建了一个 Car 对象和一个 Motorcycle 对象,并分别传递给 drive 函数进行测试。可以看到,无论是 Car 还是 Motorcycle,它们都成功地遵守了 Vehicle 协议,并正确地实现了协议中定义的要求。通过这个案例,我们可以看到,在 Swift 中,协议起到了类似于接口和协议的作用。它定义了一组要求,用于指定类、结构体或枚举类型必须遵守的一些方法、属性和其他成员。遵守协议的类型必须实现协议中规定的所有要求,以便正确地使用协议。