欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Swift中的訪問控制和protected

 更新時間:2015年05月25日 11:27:30   投稿:junjie  
這篇文章主要介紹了Swift中的訪問控制和protected,本文主要講解為什么Swift沒有類似protected的選項(xiàng),需要的朋友可以參考下

原文再續(xù),書折第一回。

很多其他編程語言都有一種”protected“設(shè)定,可以限制某些類方法只能被它的子類所使用。

Swift支持了訪問控制后,大家給我們的反饋都很不錯。而有的開發(fā)者問我們:“為什么Swift沒有類似protected的選項(xiàng)?”

當(dāng)我們在設(shè)計Swift訪問控制的不同等級時,我們認(rèn)為有兩種主要場景:

●在一個APP里:隱藏某個類的私密細(xì)節(jié)。
●在一個開源框架里:不讓導(dǎo)入這個框架的APP,隨便接觸框架的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)。

上面的兩種常見情況,對應(yīng)著private和internal這兩個等級。

而protected相當(dāng)于把訪問控制和繼承特性混在一起,把訪問控制的等級設(shè)定增加了一個維度,使之復(fù)雜化。即使設(shè)定了protected,子類還是可以通過新的公開方法、新的屬性來接觸到所謂“protected”了的API。另一方面,我們可以在各種地方重寫一個方法,所謂的保護(hù)卻沒有提供優(yōu)化機(jī)制。這種設(shè)定往往在做不必要的限制 一 protected允許了子類,但又禁止所有其他別的類(包括那些幫助子類實(shí)現(xiàn)某些功能的類)接觸父類的成員。

有的開發(fā)者指出,apple的框架有時候也會把給子類用的API分隔出來。這時候protected不就有用了嗎?我們研究后發(fā)現(xiàn),這些方法一般屬于下面兩種情況:一是這些方法對子類以外的類沒啥用,所以不需要嚴(yán)格保護(hù)(例如上面說的協(xié)助實(shí)現(xiàn)某些功能的類)。二是這些方法就是設(shè)計出來被重寫,而不是直接用的。舉個例子,drawRect(_:)就是在UIKit基礎(chǔ)上使用的方法,但它不能在UIKit以外應(yīng)用。

除此之外,如果有了protected,它要怎么樣和extension相互作用呢?一個類的extension能接觸它的protected成員嗎?一個子類的extension可以接觸父類的protected成員嗎?extension聲明的位置對訪問控制等級有沒有影響呢?(復(fù)雜到要哭了是不是?)

對訪問控制的設(shè)計,也依循了Objective-C開發(fā)者(包括apple內(nèi)外的)的常規(guī)做法。Objective-C方法和屬性一般在.h頭文件里聲明,但也可以寫在.m實(shí)現(xiàn)文件里。假如有一個公開的類,想把里面某些部分設(shè)為只有框架內(nèi)可以獲取時,開發(fā)者一般會創(chuàng)建另一個頭文件給內(nèi)部使用。以上三種訪問級別,就對應(yīng)了Swift里面的public,private和internal。

Swift的訪問控制等級和繼承無關(guān),是單維度、非常清楚明了的。我們認(rèn)為這樣的模式更簡潔,同時滿足了最主要的需求:將一個類、或一個框架的實(shí)現(xiàn)細(xì)節(jié)隔離保護(hù)起來。這可能和你以前用過的不同,但我們鼓勵你試試看。

相關(guān)文章

  • Swift?指針底層探索分析

    Swift?指針底層探索分析

    這篇文章主要為大家介紹了Swift?指針底層探索分析,主要包括指針的基本使用,以及指針的內(nèi)存綁定進(jìn)行詳細(xì)分析,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Swift中初始化init的方法小結(jié)

    Swift中初始化init的方法小結(jié)

    Swift有著超級嚴(yán)格的初始化方法,不僅強(qiáng)化了designated初始化方法的地位,所有不加修飾的init方法都需要在方法中確保非Optional的實(shí)例變量被賦值初始化,下面這篇文章主要給大家介紹了關(guān)于Swift中初始化init的相關(guān)資料,需要的朋友可以參考下。
    2018-04-04
  • Swift如何優(yōu)雅的進(jìn)行解包

    Swift如何優(yōu)雅的進(jìn)行解包

    這篇文章主要介紹了Swift優(yōu)雅的進(jìn)行解包,對swift感興趣的同學(xué),可以參考下
    2021-04-04
  • Swift初始化方法的使用介紹

    Swift初始化方法的使用介紹

    Swift有著超級嚴(yán)格的初始化方法,不僅強(qiáng)化了designated初始化方法的地位,所有不加修飾的init方法都需要在方法中確保非Optional的實(shí)例變量被賦值初始化,下面這篇文章主要給大家介紹了關(guān)于Swift中初始化init的相關(guān)資料,需要的朋友可以參考下。
    2022-08-08
  • 詳解Swift中的Characters字符類型與String字符串類型

    詳解Swift中的Characters字符類型與String字符串類型

    Swift中的字符串操作相當(dāng)便捷,下面我們來詳解Swift中的Characters字符類型與String字符串類型,需要的朋友可以參考下
    2016-06-06
  • Swift中風(fēng)味各異的類型擦除實(shí)例詳解

    Swift中風(fēng)味各異的類型擦除實(shí)例詳解

    你也許曾聽過類型擦除,甚至也使用過標(biāo)準(zhǔn)庫提供的類型擦除類型如 AnySequence,下面這篇文章主要給大家介紹了關(guān)于Swift中風(fēng)味各異的類型擦除的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Combine中錯誤處理和Scheduler使用詳解

    Combine中錯誤處理和Scheduler使用詳解

    這篇文章主要為大家介紹了Combine中錯誤處理和Scheduler使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Swift如何為網(wǎng)頁承載頁面添加更多功能詳解

    Swift如何為網(wǎng)頁承載頁面添加更多功能詳解

    這篇文章主要給大家介紹了關(guān)于Swift如何為網(wǎng)頁承載頁面添加更多功能的相關(guān)資料,包括添加菊花加載的效果、添加跳轉(zhuǎn)到Safari的功能、添加復(fù)制鏈接的功能以及添加分享網(wǎng)頁的功能,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-05-05
  • Swift利用CoreData如何存儲多種數(shù)據(jù)類的通訊錄

    Swift利用CoreData如何存儲多種數(shù)據(jù)類的通訊錄

    這篇文章主要給大家介紹了關(guān)于Swift利用CoreData如何存儲多種數(shù)據(jù)類的通訊錄的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Swift無限循環(huán)控件開發(fā)

    Swift無限循環(huán)控件開發(fā)

    這篇文章主要為大家詳細(xì)介紹了Swift無限循環(huán)控件開發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07

最新評論