亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

广水市| 七台河市| 图木舒克市| 云阳县| 南京市| 灵川县| 蓬安县| 双流县| 乾安县| 兰西县| 通辽市| 武邑县| 马关县| 建瓯市| 平山县| 加查县| 伊宁县| 昌邑市| 舒城县| 鄱阳县| 武穴市| 吉林市| 玉溪市| 岗巴县| 镶黄旗| 于都县| 周至县| 雷山县| 永宁县| 汪清县| 丹棱县| 康乐县| 阳城县| 河津市| 察哈| 工布江达县| 铁力市| 义马市| 吉首市| 许昌县| 宝山区|