16.3 扩展中声明协议
我们在16.1节介绍了扩展,在扩展中也可以声明遵守某个协议,语法如下所示:
extension 类型名 : 协议1, 协议2 {
// 协议内容
}
下面我们看看示例代码:
protocol Editable { ①
mutating func edit()
}
struct Account { ②
var amount : Double = 10.0 //账户金额
var owner : String = "" //账户名
}
extension Account : Editable { ③
mutating func edit() { ④
self.amount *= 100
self.owner = "Tony"
}
}
var account = Account() ⑤
account.edit() ⑥
println("\(account.owner) - \(account.amount)") ⑦
上述代码第①行定义了Editable
协议,第②行代码定义了Account
结构体,第③行定义了Account
结构体扩展,同时声明遵守Editable
协议。第④行定义的方法是实现Editable
协议中规定的方法,在方法中修改属性amount
和owner
。
第⑤行代码是创建Account
实例,第⑥行是调用edit
方法修改属性,最后代码第⑦行是打印修改之后的属性值。