Swift Protocol Extension Default Implemention

前言

昨天碰到一個protocol extension method的調(diào)用的問題,發(fā)現(xiàn)我給理解反了,后來查了下資料,整理總結(jié)下。

定義protocol

protocol MakeCar {
    func makeCar()
}

extension MakeCar {
    func makeCar() {
        print("default make car")
    }
}

class Creator: MakeCar {
    func makeCar() {
        print("custom make car")
    }
}

// type is Protocol
let car1: MakeCar = Creator()

// type is Class
let car2: Creator = Creator()

print(car1.makeCar())
print(car2.makeCar())

輸出:

custom make car
custom make car

聲明為Protocol的變量,沒有輸出默認(rèn)的extension實現(xiàn)。
但是將protocol中的方法注釋掉,car1的輸出是"default make car"。

這里有張圖,比較清楚的解釋了方法的調(diào)用。

call.png

后語

  1. 當(dāng)聲明的類型為protocol時,若調(diào)用的方法在protocol中聲明,則走動態(tài)調(diào)用,該是啥就是啥。
  2. 當(dāng)聲明的類型為protocol時,若調(diào)用的方法未在protocol中聲明但有默認(rèn)實現(xiàn),則走默認(rèn)實現(xiàn)。
  3. 當(dāng)聲明類型非protocol,走動態(tài)調(diào)用。
最后編輯于
?著作權(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)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,618評論 19 139
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,197評論 1 10
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,154評論 25 708
  • 1、隨機(jī)數(shù) 不需要隨機(jī)數(shù)種子 arc4random()%N + begin:產(chǎn)生begin~begin+N的隨機(jī)數(shù)...
    我是小胡胡123閱讀 4,408評論 0 2
  • 今天是寫作第二天,本來想寫為什么你會變成現(xiàn)在這個模樣,但此時覺得很累,遂把題目改成你為什么總感覺累。 身為一名大學(xué)...
    木蘇敏閱讀 308評論 0 0

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