對訪問控制與protected的理解:捕魚達人抽獎

時間:2023-11-27 22:26:14 作者:捕魚達人抽獎 熱度:捕魚達人抽獎
捕魚達人抽獎描述::當Swift提供了訪問控制特性后,大家對該特性的響應非常積極和強烈。同時也有很多開發者朋友會問“為什么Swift中沒有提供類似 protected 訪問級別呢?” 然而很多其他編程語言都有訪問控制選項,就是只能由子類可以訪問某些方法的訪問級別。當定義 Swift 的訪問級別時,我們主要考慮了以下兩個使用情況:對app的其他部分隱藏類的私有細節信息對客戶端應用程序隱藏框架的內部細節這兩種情況就分別對應了 private 和 internal 訪問級別。相比之下,protected 保護了繼承者的訪問權限,這個新的訪問控制級別給我們帶來全新的思考方式和設計模式。但實際上,該級別并沒有提供真正意義上的保護,因為子類總是能通過 public 級別的方法和屬性去暴露protected的API。它也沒有提供額外的優化解決機制,因為一個父類的方法或屬性可以被很多個子類重寫,很難控制。所以也沒有必要在這方面進行限制,也就是說在現有機制下,子類可以訪問父類的一些成員,但是在子類中使用的,或幫助子類實現某些功能的類并不一定能訪問到該子類父類的成員。正如一些開發者指出的那樣,Apple的框架里有些API被分離出來,專供子類使用。protected在這里會不會有幫助呢?我們查看了相關代碼后,發現這些API大體符合這么兩點情況。第一,一些方法在子類之外不是真正有用,所以沒有必要將其保護為只能由子類使用。第二,一些方法是專門用于重載,但不能被調用。比如 drawRect(_:) 方法,這肯定可以在 UIKit 框架代碼庫中使用,但是在 UIKit 框架之外就沒法調用了。在擴展類的時候,如何與 protected 級別的成員交互也思考的不是很明確。比如一個類的擴展是否可以訪問該類的 protected 成員呢?或者一個子類的擴展是否能訪問其父類的 protected 成員呢?在相同模塊中申明類的擴展會有什么不同呢?還有一個影響我們當前設計的因素:蘋果公司內部和外部現有的Objective-C開發者。Objective-C的方法和屬性通常都是在(.h)公共頭文件中聲明的,但同樣可以將其添加到實現文件(.m)中的類擴展部分。當公共類的某些部分在框架的其他地方使用,但沒有超出框架外時,開發者就需要使用類的“internal” bits創建第二個頭文件。這些種情況就對應著Swift中的public、private、internal三種訪問級別。Swift提供的訪問控制特性本著單一、易于理解、與繼承無關的原則。我們認為現在這種模式很簡單也很容易理解,并且也會經常用到訪問控制,比如隱藏類或框架中一些實現細節。這種訪問控制機制可能和你以前使用的其他語言不太一樣,但是我們鼓勵你們大膽的去嘗試。 最IN最潮的,翔實有趣的,統統都在史上最好用的 ——官方微信! 掃描左側二維碼或在微信公眾號頁面上搜索“愷英XY蘋果助手”即可 添加XY官方微信,匯聚XY海量資訊教程更有 豪華大禮等你來拿
站長聲明:以上關於【對訪問控制與protected的理解-捕魚達人抽獎】的內容是由各互聯網用戶貢獻並自行上傳的,我們新聞網站並不擁有所有權的故也不會承擔相關法律責任。如您發現具有涉嫌版權及其它版權的內容,歡迎發送至:1@qq.com 進行相關的舉報,本站人員會在2~3個工作日內親自聯繫您,一經查實我們將立刻刪除相關的涉嫌侵權內容。