程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Swift中的拜訪掌握和protected

Swift中的拜訪掌握和protected

編輯:更多關於編程

Swift中的拜訪掌握和protected。本站提示廣大學習愛好者:(Swift中的拜訪掌握和protected)文章只能為提供參考,不一定能成為您想要的結果。以下是Swift中的拜訪掌握和protected正文


原文再續,書折第一回。

許多其他編程說話都有一種”protected“設定,可以限制某些類辦法只能被它的子類所應用。

Swift支撐了拜訪掌握後,年夜家給我們的反應都很不錯。而有的開辟者問我們:“為何Swift沒有相似protected的選項?”

當我們在設計Swift拜訪掌握的分歧品級時,我們以為有兩種重要場景:

●在一個APP裡:隱蔽某個類的私密細節。
●在一個開源框架裡:不讓導入這個框架的APP,隨意接觸框架的外部完成細節。

下面的兩種罕見情形,對應著private和internal這兩個品級。

而protected相當於把拜訪掌握和繼續特征混在一路,把拜訪掌握的品級設定增長了一個維度,使之龐雜化。即便設定了protected,子類照樣可以經由過程新的地下辦法、新的屬性來接觸到所謂“protected”了的API。另外一方面,我們可以在各類處所重寫一個辦法,所謂的掩護卻沒有供給優化機制。這類設定常常在做不用要的限制 一 protected許可了子類,但又制止一切其他其余類(包含那些贊助子類完成某些功效的類)接觸父類的成員。

有的開辟者指出,apple的框架有時刻也會把給子類用的API分隔出來。這時候候protected不就有效了嗎?我們研討後發明,這些辦法普通屬於上面兩種情形:一是這些辦法對子類之外的類沒啥用,所以不須要嚴厲掩護(例如下面說的協助完成某些功效的類)。二是這些辦法就是設計出來被重寫,而不是直接用的。舉個例子,drawRect(_:)就是在UIKit基本上應用的辦法,但它不克不及在UIKit之外運用。

除此以外,假如有了protected,它要怎樣樣和extension互相感化呢?一個類的extension能接觸它的protected成員嗎?一個子類的extension可以接觸父類的protected成員嗎?extension聲明的地位對拜訪掌握品級有無影響呢?(龐雜到要哭了是否是?)

對拜訪掌握的設計,也依循了Objective-C開辟者(包含apple表裡的)的慣例做法。Objective-C辦法和屬性普通在.h頭文件裡聲明,但也能夠寫在.m完成文件裡。假設有一個地下的類,想把外面某些部門設為只要框架內可以獲得時,開辟者普通會創立另外一個頭文件給外部應用。以上三種拜訪級別,就對應了Swift外面的public,private和internal。

Swift的拜訪掌握品級和繼續有關,是單維度、異常清晰清楚明了的。我們以為如許的形式更簡練,同時知足了最重要的需求:將一個類、或一個框架的完成細節隔離掩護起來。這能夠和你之前用過的分歧,但我們勉勵你嘗嘗看。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved