(二十六)[Swift]牛逼的swift中的protocol

1.用分類來對(duì)protocol中的方法進(jìn)行一些默認(rèn)實(shí)現(xiàn)

protocol Callable {
    var number:String {get set}
    func call()
}

extension Callable{
    func call(){
        print("撥打了電話\(self.number)")
    }
}

struct IPhone : Callable {
    var number: String = "110"
}

var iphone = IPhone()
iphone.call() //打印撥打了電話110

2.覆蓋protocol中的默認(rèn)實(shí)現(xiàn)

struct IPhone : Callable {
    var number: String = "120"
    func call() {
        print("用IPhone 8 撥打了電話\(self.number)")
    }
}
var iphone = IPhone()
iphone.call() //打印用iphone 8 撥打了電話120

3.一個(gè)類中同一個(gè)方法有兩份方法實(shí)現(xiàn),你見過嗎?

我們把call的聲明從protocol中去除

protocol Callable {
    var number:String {get set}
}
extension Callable{
    func call(){
        print("撥打了電話\(self.number)")
    }
}

struct IPhone : Callable {
    var number: String = "119"
    func call() {
        print("用IPhone 9 撥打了電話\(self.number)")
    }
}

var iphone = IPhone()
iphone.call() //打印   用Iphone 9 撥打了電話119
(iphone as Callable).call() //打印 撥打了電話119

4.protocol中的選擇性默認(rèn)實(shí)現(xiàn),6到不能行

protocol Callable {
    var number:String {get set}
    func call()
}
extension Callable{
    func call(){
        print("撥打了電話\(self.number)")
    }
}
protocol Netable {
    var ip :String {get set}
    func net()
}

extension Netable{
    func net(){
        print("我在上網(wǎng) ip\(self.ip)")
    }
}
extension Callable where Self:Netable{
    func call(){
        print("我在用網(wǎng)絡(luò)打電話 ip \(self.ip)")
    }
}
struct IPhone9 : Callable {
    var number: String = "110"
}
struct IPhone10 : Callable,Netable {
    var number: String = "110"
    var ip: String = "110.110.110.110"
}
var iphone9 = IPhone9()
iphone9.call() //打印 撥打了電話110

var iphone10 = IPhone10()
iphone10.call() //打印 我在用網(wǎng)絡(luò)打電話 ip 110.110.110.110
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,563評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,040評(píng)論 25 709
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,697評(píng)論 18 399
  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,594評(píng)論 0 6
  • 今天中午和楚然電話,才知道我們中周末是要檢視所有的宣言五大項(xiàng):事業(yè)、家庭、人際關(guān)系、健康、個(gè)人成長,讀書方面...
    姚常春閱讀 265評(píng)論 1 7

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