Swift 中的协议(Protocol)是一种界说办法、特点和其它要求的标准。它用于指定类、结构体和枚举有必要遵从的规矩,但不供给详细的完成。Swift 中的协议类似于其它语言中的接口或抽象类。
1. 界说协议:运用 `protocol` 关键字界说一个协议,并在花括号内列出协议要求的办法、特点等。2. 遵从协议:一个类、结构体或枚举能够遵从一个或多个协议,并在其界说中运用 `: 协议名` 来指定。遵从协议的类型有必要完成协议中一切非可选的要求。3. 可选要求:协议中的要求能够是可选的,这意味着遵从协议的类型能够挑选是否完成该要求。在协议中,运用 `@optional` 符号可选要求。4. 扩展协议:能够运用 `extension` 关键字为协议增加额定的功用,而不需要修正遵从该协议的类型。这类似于为类增加扩展。5. 协议承继:协议能够承继自其它协议,这意味着它包括其它协议的一切要求,而且能够增加新的要求。
以下是一个简略的 Swift 协议示例:
```swiftprotocol CanFly { func fly}
struct Bird: CanFly { func fly { print }}
struct Plane: CanFly { func fly { print }}
let bird = Birdbird.fly // 输出:鸟在翱翔
let plane = Planeplane.fly // 输出:飞机在飞翔```
在这个示例中,`CanFly` 协议界说了一个 `fly` 办法。`Bird` 和 `Plane` 结构体都遵从了 `CanFly` 协议,并完成了 `fly` 办法。当调用 `fly` 办法时,会输出相应的音讯。
深化探究 Swift 协议:界说、遵从与运用
Swift 协议 遵从 运用 编程
一、什么是 Swift 协议?
Swift 协议(Protocol)是 Swift 编程语言中的一项中心特性,它供给了一种界说接口和完成多态的强壮办法。经过协议,咱们能够指定遵从该协议的类型有必要完成哪些功用。协议类似于其他编程语言中的接口(interface)或抽象类(abstract class)。
二、协议的根本语法
在 Swift 中,协议的界说运用 `protocol` 关键字。下面是一个简略的协议示例:
```swift
protocol ExampleProtocol {
var mustBeSettable: Int { get set }
var doesNotNeedToBeSettable: Int { get }
func protocolMethod()
在这个比如中,`ExampleProtocol` 协议界说了一个可读写特点 `mustBeSettable`、一个只读特点 `doesNotNeedToBeSettable` 和一个办法 `protocolMethod()`。
三、恪守协议
类型能够经过在类型称号后加上协议称号来恪守协议。例如:
```swift
struct ExampleStruct: ExampleProtocol {
var mustBeSettable: Int = 0
let doesNotNeedToBeSettable: Int = 1
func protocolMethod() {
// 完成协议办法
}
在这个比如中,`ExampleStruct` 结构体恪守了 `ExampleProtocol` 协议,并供给了详细的完成。
四、协议中的特点和办法
协议不只能够界说办法,还能够界说特点和下标(subscript)。协议中的特点能够是只读的,也能够是可读写的。
```swift
protocol FullyNamed {
var fullName: String { get }
var age: Int { get set }
protocol Greetable {
func greet(name: String) -> String
在上面的比如中,`FullyNamed` 协议界说了一个只读特点 `fullName` 和一个可读写特点 `age`,而 `Greetable` 协议界说了一个办法 `greet`。
五、协议的承继与组合
协议能够承继其他协议,从而在单个协议中组合多个要求。一个类型能够遵从多个协议。
```swift
protocol Vehicle {
var speed: Double { get set }
func drive()
protocol ElectricVehicle: Vehicle {
var batteryCapacity: Int { get }
class Car: ElectricVehicle {
var speed: Double = 0.0
var batteryCapacity: Int = 100
func drive() {
// 完成驾驭逻辑
}
在这个比如中,`ElectricVehicle` 协议承继自 `Vehicle` 协议,并增加了一个新的特点 `batteryCapacity`。
六、协议扩展
咱们能够经过扩展来为协议增加默许完成。这样,遵从协议的类型能够挑选性地完成这些默许完成或供给自己的完成。
```swift
extension FullyNamed {
var description: String {
return \
未经允许不得转载:全栈博客园 » swift协议, Swift 协议 遵从 运用 编程