协议的定义
protocol SomeProtocol {
// 这里是协议的定义部分
}
注:在定义类型时,需要在类型名称后加上协议名称,中间以冒号(:)分隔;
遵循多个协议时,各协议之间用逗号(,)分隔。
方法的定义
//错误的:
protocol Pet{
var name:String = "tets"
var age:Int = 18
func feed(food:String){}
}
//正确的:
protocol Pet{
var name:String{get set}
var age:Int{get}
func feed(food:String)
func shout(sound:String)
}
协议的继承:
let things: [TextRepresentable] = [game, d12, simonTheHamster]
protocol PrettyTextRepresentable: TextRepresentable {
var prettyTextualDescription: String { get }
}
协议的遵循:
class 类:父类,协议1,协议2{
}
含义:类继承某个父类,同时我遵守协议1和2
实现协议中的属性
1、属性可以设置默认值
2、协议中属性为可读可写,必须声明为var
3、协议中属性为可读的,实现中可以声明let或者var
实现协议中的方法
1、方法中的参数可以传默认值
//协议的定义
protocol Pet{
var name:String{get set}
var age:Int{get}
func feed(food:String)
func shout(sound:String)
}
class Cat:Pet{
var name: String = "mimi"
//只读可以用let
let age: Int = 10
func feed(food: String) {
print("feed\(food)")
}
func shout(sound: String = "lw") {
print("shout\(sound)")
}
}
应用:
protocol BuyTicketProtocol{
func buyTicket()
}
class MiShu:BuyTicketProtocol{
func buyTicket() {
print("秘书买票")
}
}
class HuangNiu:BuyTicketProtocol{
func buyTicket() {
print("黄牛买票")
}
}
class Boss{
var delegate:BuyTicketProtocol
self.delegate = delegate
}
func gotoBJ(){
//买票
delegate.buyTicket()
print("票到手,去出差")
}
}
var boss = Boss(delegate: HuangNiu())
boss.gotoBJ()
boss = Boss(delegate:MiShu())
boss.gotoBJ()