溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Swift2.0對(duì)象基礎(chǔ)知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2021-12-31 17:06:44 來源:億速云 閱讀:99 作者:iii 欄目:移動(dòng)開發(fā)

本篇內(nèi)容介紹了“Swift2.0對(duì)象基礎(chǔ)知識(shí)點(diǎn)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

  • 類與實(shí)例(對(duì)象)

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

使用class關(guān)鍵字定義類

     class People {

         var name:String = ""

         var age = 0

     }

     People是類名

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

     命名規(guī)范:類名首字母大寫

通過類可以創(chuàng)建實(shí)例變量或?qū)嵗A?/p>

     var p1:People = People()

     let p2 = People()

     People()表示調(diào)用了People類的構(gòu)造器

實(shí)例對(duì)象通過 . 運(yùn)算符 訪問屬性和行為

  • 屬性

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

可以是變量,也可以是常量,常量必須有默認(rèn)值

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

屬性可以分成兩大類:

     存儲(chǔ)屬性:占用存儲(chǔ)空間

     行為屬性:不占用存儲(chǔ)空間,訪問屬性時(shí)實(shí)際上是調(diào)用方法

靜態(tài)存儲(chǔ)屬性:

    使用static聲明,屬于整個(gè)類型而不是某個(gè)實(shí)例對(duì)象

     通過類名訪問靜態(tài)存儲(chǔ)屬性

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

     這種屬性只有到了一段時(shí)間后或某個(gè)條件出發(fā)后才會(huì)存在

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

     惰性屬性實(shí)現(xiàn)了類似懶加載的功能(當(dāng)屬性的值需要復(fù)雜或大量計(jì)算時(shí))

     關(guān)鍵字:lazy,必須是變量,必須有初值,如:

     class People {

         var name:String = ""

         lazy var age = 0

         func printAge() {

             print("age is \(age)")

         }

     }     

     var p1:People = People()

     p1.printAge()

     在創(chuàng)建完p1實(shí)例后,通過調(diào)試器可以查看到age.storage=nil

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

     惰性屬性的初值通常設(shè)定為函數(shù)的返回值或?qū)ο?,以?shí)現(xiàn)懶加載的功能

行為屬性:

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

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

     get的語法:

          var 行為屬性:類型 {

               get {

                    return 符合類型的值

               }

          }

     可簡(jiǎn)化為:

          var 行為屬性:類型 {

                    return 符合類型的值

          }

     set的語法:

          var 行為屬性:類型 {

               set (newValue) {

                    //操作

               }

          }

     可簡(jiǎn)化為:

          var 行為屬性:類型 {

               set {//操作}//省略的參數(shù)名默認(rèn)為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 = "沒中獎(jiǎng)"

     print(p1.mindDesc)

     print(p1.isHappy)

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

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

    }

類行為屬性:

     類行為屬性是一種特殊的行為屬性,屬于整個(gè)類型,而不屬于某個(gè)實(shí)例對(duì)象

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

     也可稱作是靜態(tài)行為屬性(static一般用于結(jié)構(gòu)體、枚舉,class用于類類型)

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

     如:

     class People {

         class var maxHeight:Float {

             return 2.40

         }

     }

     print(People.maxHeight)

屬性的觀察器:

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

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

     如:

    class People {
        var salary:Int = 200 {

            willSet{

                print("工資調(diào)整了!")

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

    p1.salary = 150

     屬性觀察器實(shí)現(xiàn)了類似KVO模式的功能

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

  • 方法

方法是與類型相關(guān)聯(lián)的函數(shù),是類應(yīng)具有的行為動(dòng)作,與C++/Java這些語言不同的是:在結(jié)構(gòu)體和枚舉中都可以定義方法

對(duì)象方法:

     實(shí)例方法通過實(shí)例對(duì)象通過.運(yùn)算符調(diào)用

     如:

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

    print("salary is \(s)")

     在實(shí)例方法內(nèi)部可以直接訪問屬性,因?yàn)閷傩缘淖饔糜蚴窃陬惖膬?nèi)部

     在實(shí)例方法內(nèi)部可以直接調(diào)用實(shí)例方法,因?yàn)閷?shí)例方法的作用域是在類的內(nèi)部

     注意:方法也是函數(shù),函數(shù)的規(guī)則都是支持的

類方法:

     與類型屬性類似,不屬于某個(gè)實(shí)例對(duì)象,而是屬于整個(gè)類,通過類名調(diào)用

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

     也稱“靜態(tài)方法”(static用于結(jié)構(gòu)體、枚舉,class用于類類型)

     如:

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

    }

    People.printDesc()

     需要注意的是:在類方法內(nèi)部,只能訪問類行為屬性、靜態(tài)屬性和類方法

方法中的self關(guān)鍵字:

     在對(duì)象方法中,self表示當(dāng)前實(shí)例對(duì)象

     在類方法中,self表示當(dāng)前類

下標(biāo)腳本方法:

     是Swift提供的一種特殊對(duì)象方法,對(duì)象通過下標(biāo)s運(yùn)算符調(diào)用下標(biāo)方法

     語法:subscript(參數(shù)列表)->返回值 { 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]!)

     下標(biāo)方法的參數(shù)可以是多個(gè),甚至是可變的,不能用inout修飾,不能設(shè)置默認(rèn)參數(shù)值

     下標(biāo)方法可以重載,也可以只讀,如:

    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的訪問權(quán)限

三個(gè)訪問權(quán)限修飾符:private  internal public

     訪問權(quán)限的控制不是基于類的,而是基于文件的,即修飾標(biāo)識(shí)符在哪些源文件中可以進(jìn)行訪問

     可修飾的標(biāo)識(shí)符:類名、結(jié)構(gòu)體名、枚舉名、方法名、屬性名等

     private:只能在當(dāng)前的源文件中訪問

     internal:只能在當(dāng)前源文件所在的模塊中訪問(默認(rèn)權(quán)限,可以不寫)

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

“Swift2.0對(duì)象基礎(chǔ)知識(shí)點(diǎn)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI