Swift语法介绍: 协议Protocol定义
定义协议
- 协议的首字母建议大写。
- 在协议中定义的变量(属性)都必须指定get/set限定符,用来标示变量是否支持读写。如果只使用了{get},则在遵循协议的类或者结构中声明相应的变量时,可以使用关键字let。如果使用了{get set},则在遵循协议的类或者结构中,必须使用var来声明相应的变量。
//租赁协议
protocol RentProtocol {
//协议中定义的属性,必须指定{get}或{get set}
var pricePerMonth:Double {get}
var duration:Int {get set}
var discount:Double {get set}
//协议中定义函数(方法)
func payment() -> Double //付款
func cancel() //取消租赁合同
}
定义遵守协议的类
可以在不同的类中,对协议中的方法设置不同的功能实现,如RentProtocol协议中的cancel方法,如下。
class PersonalRenter:RentProtocol {
var personName:String?
//协议中定义的属性
let pricePerMonth:Double = 500.0
var duration:Int = 3
var discount:Double = 1.0
func payment() -> Double {
let amount = self.pricePerMonth * self.discount * Double(duration)
return amount
}
func cancel() {
print("与个人客户的租赁协议取消")
}
}
class BusinessRenter:RentProtocol {
var companyName:String?
//协议中定义的属性
let pricePerMonth:Double = 400.0
var duration:Int = 12
var discount:Double = 0.9
func payment() -> Double {
let amount = self.pricePerMonth * self.discount * Double(duration)
return amount
}
func cancel() {
print("与企业客户的租赁协议取消")
}
}
调用协议中的方法和属性
var person = PersonalRenter()
person.personName = "jack"
person.duration = 6
let personAmount = person.payment()
print("\(person.personName)(个人)应付租金\(personAmount)元")
person.cancel()
var company = BusinessRenter()
company.companyName = "Government"
company.duration = 24
let companyAmount = company.payment()
print("\(company.companyName)(企业)应付租金\(companyAmount)元")
company.cancel()
运行结果:
代码下载
https://github.com/99ios/SwiftBasic