Swift - final關(guān)鍵字的介紹,以及使用場景

final關(guān)鍵字在大多數(shù)的編程語言中都存在,表示不允許對其修飾的內(nèi)容進行繼承或者重新操作。Swift中,final關(guān)鍵字可以在class、func和var前修飾。
通常大家都認(rèn)為使用final可以更好地對代碼進行版本控制,發(fā)揮更佳的性能,同時使代碼更安全。下面對這些說法做個總結(jié)。

1,想通過使用final提升程序性能 - 效果有限

通常認(rèn)為final能改成性能,因為編譯器能從final中獲取額外的信息,因此可以對類或者方法調(diào)用進行額外的優(yōu)化處理。但這中優(yōu)化對程序性能的提升極其有限。
所以如果抱著提升性能的想法,就算把所有不需要繼承的方法、類都加上final關(guān)鍵字,也沒多大作用。還不如花時間去優(yōu)化下程序算法。

2,final正確的使用場景 - 權(quán)限控制

也就是說這個類或方法不希望被繼承和重寫,具體情況如下:
(1)類或者方法的功能確實已經(jīng)完備了
這種通常是一些輔助性質(zhì)的工具類或者方法,特別那種只包含類方法而沒有實例方法的類。比如MD5加密類這種,算法都十分固定,我們基本不會再繼承和重寫。
(2)避免子類繼承和修改造成危險
有些方法如果被子類繼承重寫會造成破壞性的后果,導(dǎo)致無法正常工作,則需要將其標(biāo)為final加以保護。
(3)為了讓父類中某些代碼一定會執(zhí)行
父類的方法如果想要其中一些關(guān)鍵代碼在繼承重寫后仍必須執(zhí)行(比如狀態(tài)配置、認(rèn)證等)。我們可以把父類的方法定義成final,同時將內(nèi)部可以繼承的部分剝離出來,供子類繼承重寫。下面通過一段代碼演示:

class Parent {
   final func method1() {
       //權(quán)限驗證(必須執(zhí)行)
       //.....
        
       method2()
        
       //下面是日志記錄(必須執(zhí)行)
       //..........
   }
    
   func method2(){
       //父類的實現(xiàn)
       //......
   }
}

class Child : Parent {
   //只能重寫父類的method2方法,不能重寫method1方法
   override func method2() {
       //子類的實現(xiàn)
       //......
   }
}
?著作權(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)容