中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Swift訪問限定

發布時間:2020-03-02 16:13:30 來源:網絡 閱讀:394 作者:hehemmm 欄目:移動開發


        Swift語言可以實現封裝,由于在Swift中類、結構體和枚舉類型都具有面向對象的特性,因此Swift的封裝就變得比較復雜了


一、訪問范圍


        訪問范圍主要有2個:模塊和源文件


    1、關于模塊

            模塊是指一個應用程序包成一個框架,在Swift中,可以使用import關鍵字引入模塊到自己的工程中


    應用程序包指一個可執行的應用程序包,其內部包含了很多swift文件以及其他一些文件,


    框架也是很多switf文件以及其他一些文件的集合,但與應用程序包不同的是,它編譯的結果是不可執行程序


2、源文件


        源文件指的是swift種的.swift文件,它編譯之后被包含在應用程序包或框架中,通常一個源文件包含一個面向對象類型(類、結構體和枚舉),在這些函數中包含函數、屬性等


二、訪問級別


        Swift提供了3種不同的訪問級別,有這些修飾符:public,private,internal,這些訪問修飾符可以修飾類、結構體、嵌套等面向對象類型,還可以修飾:變量,常量、下標、元組、函數、屬性等內容


        1、public 可以訪問自己類中的任何public實體,如果使用import引入其他模塊,可以訪問其它模塊的public實體


        2、internal  只能訪問自己模塊的internal實體,不能訪問其他模塊的internal實體,internal可以省略,缺省訪問限定是internal


        3、private 只能在當前源文件中使用的實體,成為私有實體,使用private修飾符,可以用作隱藏某些功能的實現細節。


三、使用訪問限制最佳實踐


        1、統一性原則

                (1)原則1:如果一個類型(類、結構體和枚舉)定義為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:函數的訪問級別不能高于它的參數和返回類型的訪問級別,假設函數聲明為public,而參數或返回值聲明為internal或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
        }

       上述代碼會發生編譯錯誤,說明了getEmpDept的函數的訪問級別高于Employee類型的訪問級別


        2、設計原則


            如果編寫的是應用程序,應用程序包中的所有Swift文件和其中定義的實體,都是給本應用使用的,而不是提供給其他模塊使用,那么就不用設置訪問級別,也就是默認的訪問級別。

            如果開發的是框架,框架編譯的文件不能獨立運行,因此它是給別人使用的,這種情況下我們就要詳細設計其中的swift文件和實體的訪問級別,其中讓別人使用的設計為public,不想讓別人看到的可以設計為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

            


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浦北县| 定襄县| 邹城市| 平潭县| 东明县| 长垣县| 绥中县| 斗六市| 周口市| 扎赉特旗| 施秉县| 普兰店市| 富顺县| 岚皋县| 淮安市| 遂川县| 曲水县| 耿马| 逊克县| 霍林郭勒市| 阆中市| 潞西市| 兴海县| 庆城县| 略阳县| 马关县| 湘潭县| 友谊县| 汾阳市| 镇原县| 浏阳市| 乌兰浩特市| 馆陶县| 改则县| 砀山县| 辛集市| 鹤山市| 忻州市| 临澧县| 海淀区| 巴东县|