Swift中的协议详解

协议可以定义某一类类型都应遵守的属性、方法等规范,然后在结构体、类、枚举中采纳协议来实现规定的内容。这是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代码更加优雅。