在 Swift 中,协议(protocol)是一种定义方法、属性和其他特定任务的蓝图。类、结构体或枚举可以遵循(adopt)协议,从而提供所需的功能。协议定义了一组要求,遵循协议的类型需要提供对应的功能实现。
定义协议
使用关键字 protocol
来定义一个协议。协议可以包含方法、属性、下标、以及其他协议等。
示例:
protocol FullyNamed {var fullName: String { get }
}
遵循协议
使用 class
、struct
或 enum
关键字后面跟着协议名来表示该类型遵循了该协议。
示例:
struct Person: FullyNamed {var fullName: String
}
属性要求
协议可以要求遵循协议的类型提供特定的属性,并指定这些属性是只读的还是可读写的。
示例:
protocol SomeProtocol {var readOnlyProperty: Int { get }var readWriteProperty: String { get set }
}
方法要求
协议可以要求遵循协议的类型实现特定的方法。
示例:
protocol RandomNumberGenerator {func random() -> Double
}
扩展协议
协议可以通过扩展来提供方法和属性的默认实现。
示例:
extension RandomNumberGenerator {func randomBool() -> Bool {return random() > 0.5}
}
协议组合
可以使用协议组合来要求一个类型遵循多个协议。
示例:
protocol Named {var name: String { get }
}
protocol Aged {var age: Int { get }
}
func wishHappyBirthday(to celebrator: Named & Aged) {print("Happy birthday, \(celebrator.name), you're \(celebrator.age)!")
}
在 Swift 中,协议是非常灵活和强大的,它可以用于定义接口、多态和代码复用。通过协议,我们可以定义出清晰的抽象接口,使得代码更加模块化和可复用。