swift 中 java 接口或 Objective C 协议的等价物是什么

作者:编程家 分类: swift 时间:2025-07-11

在 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 中,协议起到了类似于接口和协议的作用。它定义了一组要求,用于指定类、结构体或枚举类型必须遵守的一些方法、属性和其他成员。遵守协议的类型必须实现协议中规定的所有要求,以便正确地使用协议。