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

溫馨提示×

溫馨提示×

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

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

Swift2.0對象基礎知識點有哪些

發布時間:2021-12-31 17:06:44 來源:億速云 閱讀:102 作者:iii 欄目:移動開發

本篇內容介紹了“Swift2.0對象基礎知識點有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

  • 類與實例(對象)

類“是引用類型”,而非“值類型”

使用class關鍵字定義類

     class People {

         var name:String = ""

         var age = 0

     }

     People是類名

     {}包含類的主體部分,包括屬性和行為

     命名規范:類名首字母大寫

通過類可以創建實例變量或實例常量

     var p1:People = People()

     let p2 = People()

     People()表示調用了People類的構造器

實例對象通過 . 運算符 訪問屬性和行為

  • 屬性

可以帶默認值,也可以不帶默認值(稍后介紹)

可以是變量,也可以是常量,常量必須有默認值

屬性的類型也可以是可選類型

屬性可以分成兩大類:

     存儲屬性:占用存儲空間

     行為屬性:不占用存儲空間,訪問屬性時實際上是調用方法

靜態存儲屬性:

    使用static聲明,屬于整個類型而不是某個實例對象

     通過類名訪問靜態存儲屬性

惰性存儲屬性:(存儲屬性)

     這種屬性只有到了一段時間后或某個條件出發后才會存在

     在此之前,該屬性僅僅是占位,無存儲空間

     惰性屬性實現了類似懶加載的功能(當屬性的值需要復雜或大量計算時)

     關鍵字:lazy,必須是變量,必須有初值,如:

     class People {

         var name:String = ""

         lazy var age = 0

         func printAge() {

             print("age is \(age)")

         }

     }     

     var p1:People = People()

     p1.printAge()

     在創建完p1實例后,通過調試器可以查看到age.storage=nil

     在調用printAge()方法后,由于訪問到了age屬性,通過調試器可以看到age.storage=0

     惰性屬性的初值通常設定為函數的返回值或對象,以實現懶加載的功能

行為屬性:

     雖是屬性但沒有實際存儲空間,提供取值訪問器get和賦值訪問器set

     行為屬性必須是變量,不能有初值

     get的語法:

          var 行為屬性:類型 {

               get {

                    return 符合類型的值

               }

          }

     可簡化為:

          var 行為屬性:類型 {

                    return 符合類型的值

          }

     set的語法:

          var 行為屬性:類型 {

               set (newValue) {

                    //操作

               }

          }

     可簡化為:

          var 行為屬性:類型 {

               set {//操作}//省略的參數名默認為newValue

          }

     如:

     class People {

         var mindDesc:String = ""

         var dream:String = ""

         var reality:String = ""

         var isHappy:Bool {

             get {

                 if (!dream.isEmpty && dream == reality) || mindDesc == "Happy"  {

                     return true

                 }

                 else {

                     return false

                 }

             }

             set(newValue) {

                 if ( newValue ) {

                     mindDesc = "Happy"

                 }

                 else {

                     mindDesc = "No Happy"

                 }

             }

         }

     }

     var p1 = People()

     p1.isHappy = true

     //p1.dream = "中500萬"

     //p1.reality = "沒中獎"

     print(p1.mindDesc)

     print(p1.isHappy)

     如果不提供set賦值訪問器,則該屬性是只讀的,如:

    var isHappy:Bool {
        if (!dream.isEmpty && dream == reality) || mindDesc == "Happy"  {
            return true
        }
        else {
            return false
        }

    }

類行為屬性:

     類行為屬性是一種特殊的行為屬性,屬于整個類型,而不屬于某個實例對象

     使用class修飾,通過類名訪問

     也可稱作是靜態行為屬性(static一般用于結構體、枚舉,class用于類類型)

     語法:   class var 屬性名:類型 { get/set{} }

     如:

     class People {

         class var maxHeight:Float {

             return 2.40

         }

     }

     print(People.maxHeight)

屬性的觀察器:

     用于檢測屬性變化的周期,分成willSet和didSet兩個觀察期

     語法:willSet(newValue){}  didSet(oldValue)     //參數都可以省略

     如:

    class People {
        var salary:Int = 200 {

            willSet{

                print("工資調整了!")

            }
            didSet{
                if salary > oldValue  {
                    print("漲工資了!")
                }
                else if  salary < oldValue  {
                    print("降工資了!")
                }
            }
        }
    }
    var p1:People = People()
    p1.salary = 300

    p1.salary = 150

     屬性觀察器實現了類似KVO模式的功能

     屬性觀察器同樣適用于全局變量和局部變量,其中全局變量可理解為省略了lazy的惰性行為變量

  • 方法

方法是與類型相關聯的函數,是類應具有的行為動作,與C++/Java這些語言不同的是:在結構體和枚舉中都可以定義方法

對象方法:

     實例方法通過實例對象通過.運算符調用

     如:

    class People {
        var salary:Int = 200
        func receiveSalary(date:String)->Int {
            print("發 \(date) 工資了!")
            return salary
        }
    }
    var p1:People = People()
    var s = p1.receiveSalary("2016年2月")

    print("salary is \(s)")

     在實例方法內部可以直接訪問屬性,因為屬性的作用域是在類的內部

     在實例方法內部可以直接調用實例方法,因為實例方法的作用域是在類的內部

     注意:方法也是函數,函數的規則都是支持的

類方法:

     與類型屬性類似,不屬于某個實例對象,而是屬于整個類,通過類名調用

     語法:class func 方法名(參數列表)->返回值 {}

     也稱“靜態方法”(static用于結構體、枚舉,class用于類類型)

     如:

    class People {
        class var desc:String {
            return "人類"
        }
        class func printDesc() {
            print("我們是\(desc)")
        }

    }

    People.printDesc()

     需要注意的是:在類方法內部,只能訪問類行為屬性、靜態屬性和類方法

方法中的self關鍵字:

     在對象方法中,self表示當前實例對象

     在類方法中,self表示當前類

下標腳本方法:

     是Swift提供的一種特殊對象方法,對象通過下標s運算符調用下標方法

     語法:subscript(參數列表)->返回值 { get/set訪問器 }

     如:

    class People {

        var names:[Int:String] = [:]

        subscript(index:Int)->String? {
            get {
                return names[index]
            }
            set {
                names[index] = newValue
            }
        }

    }

    var p:People = People()
    p[001] = "張三"
    p[007] = "李四"
    print(p[001]!)

    print(p[007]!)

     下標方法的參數可以是多個,甚至是可變的,不能用inout修飾,不能設置默認參數值

     下標方法可以重載,也可以只讀,如:

    class People {

        var names:[Int:String] = [:]

        subscript(index:Int)->String? {
            get {
                return names[index]
            }
            set {
                names[index] = newValue
            }
        }
        subscript(index:Int, appendString:String )->String? {
            get {
                let s:String? = names[index]!+appendString
                return s
            }
        }

    }

    var p:People = People()
    p[001] = "張三"
    p[007] = "李四"

    print(p[001]!)

    print(p[007, "哈嘍"]!)

  • swift的訪問權限

三個訪問權限修飾符:private  internal public

     訪問權限的控制不是基于類的,而是基于文件的,即修飾標識符在哪些源文件中可以進行訪問

     可修飾的標識符:類名、結構體名、枚舉名、方法名、屬性名等

     private:只能在當前的源文件中訪問

     internal:只能在當前源文件所在的模塊中訪問(默認權限,可以不寫)

     public:在任意源文件中都可以訪問

“Swift2.0對象基礎知識點有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

AI

武汉市| 定州市| 海晏县| 镇赉县| 马鞍山市| 乾安县| 台北市| 怀柔区| 专栏| 宁强县| 乐陵市| 壶关县| 郁南县| 磐安县| 弥勒县| 新蔡县| 若羌县| 温州市| 普兰县| 邢台县| 金溪县| 龙山县| 盐边县| 都匀市| 陇川县| 革吉县| 甘孜县| 谢通门县| 翼城县| 喀喇| 托里县| 郴州市| 凌源市| 和田市| 泸溪县| 义乌市| 昌吉市| 屏南县| 阿合奇县| 宁波市| 清镇市|