一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Swift - Swift中的訪問(wèn)控制和protected

Swift中的訪問(wèn)控制和protected

2020-12-20 17:08Swift教程網(wǎng) Swift

這篇文章主要介紹了Swift中的訪問(wèn)控制和protected,本文主要講解為什么Swift沒(méi)有類(lèi)似protected的選項(xiàng),需要的朋友可以參考下

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

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

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

當(dāng)我們?cè)谠O(shè)計(jì)Swift訪問(wèn)控制的不同等級(jí)時(shí),我們認(rèn)為有兩種主要場(chǎng)景:

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

上面的兩種常見(jiàn)情況,對(duì)應(yīng)著private和internal這兩個(gè)等級(jí)。

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

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

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

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

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

延伸 · 閱讀

精彩推薦
  • SwiftSwift的74個(gè)常用內(nèi)置函數(shù)介紹

    Swift的74個(gè)常用內(nèi)置函數(shù)介紹

    這篇文章主要介紹了Swift的74個(gè)常用內(nèi)置函數(shù)介紹,這篇文章列舉出了所有的Swift庫(kù)函數(shù),內(nèi)置函數(shù)是指無(wú)需引入任何模塊即可以直接使用的函數(shù),需要的朋友可...

    Swift教程網(wǎng)5802020-12-19
  • Swiftswift where與匹配模式的實(shí)例詳解

    swift where與匹配模式的實(shí)例詳解

    這篇文章主要介紹了swift where與匹配模式的實(shí)例詳解的相關(guān)資料,這里附有簡(jiǎn)單的示例代碼,講的比較清楚,需要的朋友可以參考下...

    追到夢(mèng)的魔術(shù)師14382021-01-06
  • SwiftSwift使用CollectionView實(shí)現(xiàn)廣告欄滑動(dòng)效果

    Swift使用CollectionView實(shí)現(xiàn)廣告欄滑動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Swift使用CollectionView實(shí)現(xiàn)廣告欄滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    Stevin的技術(shù)博客12372021-01-13
  • SwiftSwift中轉(zhuǎn)義閉包示例詳解

    Swift中轉(zhuǎn)義閉包示例詳解

    在Swift 中的閉包類(lèi)似于結(jié)構(gòu)塊,并可以在任何地方調(diào)用,下面這篇文章主要給大家介紹了關(guān)于Swift中轉(zhuǎn)義閉包的相關(guān)資料,需要的朋友可以參考下...

    小小小_小朋友11412021-12-26
  • SwiftSwift能代替Objective-C嗎?

    Swift能代替Objective-C嗎?

    這是我在網(wǎng)上上看到的答案,復(fù)制粘貼過(guò)來(lái)和大家分享一下,因?yàn)槲液秃芏嗳艘粯雍荜P(guān)心Swift的出現(xiàn)對(duì)Mac開(kāi)發(fā)的影響和對(duì)Objective-C的影響。...

    Swift教程網(wǎng)4412020-12-16
  • SwiftSwift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果

    Swift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果

    這篇文章主要為大家詳細(xì)介紹了Swift實(shí)現(xiàn)多個(gè)TableView側(cè)滑與切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下...

    乞力馬扎羅的雪雪5822021-01-08
  • Swiftmac git xcrun error active developer path 錯(cuò)誤

    mac git xcrun error active developer path 錯(cuò)誤

    本文主要是講訴了如何解決在mac下使用git;xcode4.6的環(huán)境時(shí),出現(xiàn)了錯(cuò)誤(mac git xcrun error active developer path)的解決辦法,希望對(duì)大家有所幫助...

    Swift教程網(wǎng)2232020-12-16
  • SwiftSwift教程之基礎(chǔ)數(shù)據(jù)類(lèi)型詳解

    Swift教程之基礎(chǔ)數(shù)據(jù)類(lèi)型詳解

    這篇文章主要介紹了Swift教程之基礎(chǔ)數(shù)據(jù)類(lèi)型詳解,本文詳細(xì)講解了Swift中的基本數(shù)據(jù)類(lèi)型和基本語(yǔ)法,例如常量和變量、注釋、分號(hào)、整數(shù)、數(shù)值類(lèi)型轉(zhuǎn)換等...

    Swift教程網(wǎng)5162020-12-18
主站蜘蛛池模板: 王者荣耀瑶白色液体 | 91精品国产综合久久消防器材 | 久久夜色噜噜噜亚洲AV0000 | 日韩精品一区二区三区毛片 | 国产精品久久久久久久久免费 | 亚洲国产婷婷俺也色综合 | 日本无遮挡拍拍拍凤凰 | 人人澡人 | 久久亚洲精品专区蓝色区 | 白鹿扒开内裤露出尿孔 | ts人妖系列在线专区 | 96日本xxxxxxxxx70 95在线观看精品视频 | 国产精品久久久久久久免费大片 | 免费在线视频成人 | 免费欧美视频 | 日本黄a三级三级三级 | 久久国产精品二区99 | 精品亚洲综合在线第一区 | 久久免费国产视频 | 免费人成黄页在线观看69 | 国产高清在线播放免费观看 | 国产精品久久现线拍久青草 | 欧美日韩亚洲另类人人澡 | 爱草影院| 日韩欧美在线看 | 99re在线视频观看 | 日韩欧美国产免费看清风阁 | 国产美女在线一区二区三区 | 羞羞一区二区三区四区片 | 国产成人lu在线视频 | 嗯啊好大好粗 | 欧美专区在线播放 | 欧美日韩国产亚洲一区二区三区 | 天堂在线中文字幕 | 免费精品99久久国产综合精品 | 污小说 | 免费视屏 | 国产一级片免费观看 | 国产精品男人的天堂 | 午夜A级理论片左线播放 | 2021国产麻豆剧传媒剧情动漫 |