16.3 扩展中声明协议

我们在16.1节介绍了扩展,在扩展中也可以声明遵守某个协议,语法如下所示:

  1. extension 类型名 : 协议1, 协议2 {
  2. // 协议内容
  3. }

下面我们看看示例代码:

  1. protocol Editable {
  2. mutating func edit()
  3. }
  4. struct Account {
  5. var amount : Double = 10.0 //账户金额
  6. var owner : String = "" //账户名
  7. }
  8. extension Account : Editable {
  9. mutating func edit() {
  10. self.amount *= 100
  11. self.owner = "Tony"
  12. }
  13. }
  14. var account = Account()
  15. account.edit()
  16. println("\(account.owner) - \(account.amount)")

上述代码第①行定义了Editable协议,第②行代码定义了Account结构体,第③行定义了Account结构体扩展,同时声明遵守Editable协议。第④行定义的方法是实现Editable协议中规定的方法,在方法中修改属性amountowner

第⑤行代码是创建Account实例,第⑥行是调用edit方法修改属性,最后代码第⑦行是打印修改之后的属性值。