协议可以定义某一类类型都应遵守的属性、方法等规范,然后在结构体、类、枚举中采纳协议来实现规定的内容。这是Swift中的面向协议编程。
协议定义
使用protocol来定义一个协议:
swift www.itzhimei.com代码
protocol Vehicle {
var name: String { get }
var currentSpeed: Double { get set }
func startEngine()
func accelerate()
func decelerate()
func stopEngine()
}
协议内可以定义属性和方法规范。
采纳协议
结构体、类、枚举可以采纳协议,来实现其要求的内容:
struct Bicycle: Vehicle {
var name = "Bicycle"
var currentSpeed = 0.0
func startEngine() {
print("\(name) starting paddling")
}
// 其他实现
}
通过adopt protocol的方式实现协议要求。
属性规范
协议可以指定属性是只读还是可读写:
protocol Vehicle {
var name: String { get set }
var currentSpeed: Double { get }
}
adopt时必须满足协议对属性的规范。
方法规范
协议方法也可以指定是类方法还是实例方法:
protocol Vehicle {
static func printType()
func drive()
}
对应的实现必须满足方法类型要求。
扩展协议
可以通过扩展来为协议添加新功能:
extension Vehicle {
func autopilot() {
// 自动驾驶实现
}
}
所有采纳协议的类型都会获得这个新方法。
协议是Swift中非常强大的一项功能,可以设计简洁、模块化和可扩展的程序架构。充分利用协议可以使我们的Swift代码更加优雅。