協(xié)議的定義
protocol SomeProtocol {
// 這里是協(xié)議的定義部分
}
注:在定義類型時,需要在類型名稱后加上協(xié)議名稱,中間以冒號(:)分隔;
遵循多個協(xié)議時,各協(xié)議之間用逗號(,)分隔。
方法的定義
//錯誤的:
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)
}
協(xié)議的繼承:
let things: [TextRepresentable] = [game, d12, simonTheHamster]
protocol PrettyTextRepresentable: TextRepresentable {
var prettyTextualDescription: String { get }
}
協(xié)議的遵循:
class 類:父類,協(xié)議1,協(xié)議2{
}
含義:類繼承某個父類,同時我遵守協(xié)議1和2
實現(xiàn)協(xié)議中的屬性
1、屬性可以設(shè)置默認值
2、協(xié)議中屬性為可讀可寫,必須聲明為var
3、協(xié)議中屬性為可讀的,實現(xiàn)中可以聲明let或者var
實現(xiàn)協(xié)議中的方法
1、方法中的參數(shù)可以傳默認值
//協(xié)議的定義
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)")
}
}
應(yīng)用:
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()