2020-04-21 協(xié)議

協(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()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容