Swift語言可以實現(xiàn)封裝,由于在Swift中類、結(jié)構(gòu)體和枚舉類型都具有面向?qū)ο蟮奶匦?,因此Swift的封裝就變得比較復雜了
成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目做網(wǎng)站、成都做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元臨漳做網(wǎng)站,已為上家服務,為臨漳各地企業(yè)和個人服務,聯(lián)系電話:13518219792一、訪問范圍
訪問范圍主要有2個:模塊和源文件
1、關(guān)于模塊
模塊是指一個應用程序包成一個框架,在Swift中,可以使用import關(guān)鍵字引入模塊到自己的工程中
應用程序包指一個可執(zhí)行的應用程序包,其內(nèi)部包含了很多swift文件以及其他一些文件,
框架也是很多switf文件以及其他一些文件的集合,但與應用程序包不同的是,它編譯的結(jié)果是不可執(zhí)行程序
2、源文件
源文件指的是swift種的.swift文件,它編譯之后被包含在應用程序包或框架中,通常一個源文件包含一個面向?qū)ο箢愋停悺⒔Y(jié)構(gòu)體和枚舉),在這些函數(shù)中包含函數(shù)、屬性等
二、訪問級別
Swift提供了3種不同的訪問級別,有這些修飾符:public,private,internal,這些訪問修飾符可以修飾類、結(jié)構(gòu)體、嵌套等面向?qū)ο箢愋停€可以修飾:變量,常量、下標、元組、函數(shù)、屬性等內(nèi)容
1、public 可以訪問自己類中的任何public實體,如果使用import引入其他模塊,可以訪問其它模塊的public實體
2、internal 只能訪問自己模塊的internal實體,不能訪問其他模塊的internal實體,internal可以省略,缺省訪問限定是internal
3、private 只能在當前源文件中使用的實體,成為私有實體,使用private修飾符,可以用作隱藏某些功能的實現(xiàn)細節(jié)。
三、使用訪問限制最佳實踐
1、統(tǒng)一性原則
(1)原則1:如果一個類型(類、結(jié)構(gòu)體和枚舉)定義為internal或private,那么類型聲明的變量或常量不能使用public訪問級別,因為public的變量或常量允許任何人訪問,而private或internal的類型不允許
private class Employee { var no:Int = 0 var name:String = "" var job:String? var salary:Double var dept:Department? } internal struct Department { var no: Int = 0 var name:String ="" } public let emp = Employee() //編譯錯誤 public var dept = Department() //編譯錯誤
(2)原則2:函數(shù)的訪問級別不能高于它的參數(shù)和返回類型的訪問級別,假設(shè)函數(shù)聲明為public,而參數(shù)或返回值聲明為internal或private,則會出現(xiàn)函數(shù)可以被任何人訪問,但是它的參數(shù)和返回類型不可以的矛盾情況
示例:
class Employee { var no:Int = 0 var name:String = "" var job:String? var salary:Double var dept:Department? } struct Department { var no: Int = 0 var name:String ="" } public func getEmpDept(emp:Employee)->Department? { return emp.dept } 上述代碼會發(fā)生編譯錯誤,說明了getEmpDept的函數(shù)的訪問級別高于Employee類型的訪問級別2、設(shè)計原則
如果編寫的是應用程序,應用程序包中的所有Swift文件和其中定義的實體,都是給本應用使用的,而不是提供給其他模塊使用,那么就不用設(shè)置訪問級別,也就是默認的訪問級別。
如果開發(fā)的是框架,框架編譯的文件不能獨立運行,因此它是給別人使用的,這種情況下我們就要詳細設(shè)計其中的swift文件和實體的訪問級別,其中讓別人使用的設(shè)計為public,不想讓別人看到的可以設(shè)計為internal或private
3、元組類型的訪問級別
元組類型的訪問級別是遵循它元組中的字段最低級的訪問級別,示例如下:
private class Employee { var no:Int = 0 var name:String = "" var job:String? var salary:Double var dept:Department? } struct Department { var no: Int = 0 var name:String ="" } public func getEmpDept(emp:Employee)->Department? { return emp.dept } private let emp = Employee() var dept = Department() private var student1 = (dept,emp)4、枚舉類型的訪問級別
枚舉中成員的訪問級別繼承自該枚舉,我們不能為枚舉中的成員指定訪問級別,如下所示
public enum WeekDays{ case Monday case Tuesday case Wednesday case Thursday case Friday }WeekDays的訪問級別是public,那么它的成員的訪問級別也為public
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。