老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

Swift2.0(13)構造方法

  • 構造方法

    成都創新互聯堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站設計、成都網站建設、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的濱海新區網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!

實例對象在被創建時,需要對存儲屬性初始化,兩種方式:

     方法一:在聲明屬性的同時設定初值(之前一直使用這種方式)

     方法二:使用構造方法

構造方法init:在對象創建時自動調用并對實例對象的存儲屬性進行初始化

     a. 無需func關鍵字聲明

     b. 參數列表里可以有多個參數,也可以沒有參數,參數可以有默認值

     c. 支持重寫和重載

     d. 沒有返回值

     如:

    class Person{
        var name:String
        var age:Int
        init(name:String, age:Int) {
            self.name = name
            self.age = age
        }
        init(name1:String) {
            self.name = name1
            self.age = 11
        }
        init(name2:String) {
            self.name = name2
            self.age = 12
        }
        init() {
            self.name = "123"
            self.age = 20
        }
    }
    var p1:Person = Person()
    print("name:\(p1.name) age:\(p1.age)")//name:123 age:20
    var p2:Person = Person(name1: "iOS")
    print("name:\(p2.name) age:\(p2.age)")//name:iOS age:11
    var p3:Person = Person(name2: "iOS")
    print("name:\(p3.name) age:\(p3.age)")//name:iOS age:12
    var p4:Person = Person(name: "iPhone", age: 7)

    print("name:\(p4.name) age:\(p4.age)")//name:iPhone age:7

     init()方法是強制包含外部參數名的,即使未顯式寫出,也是有的,相當于參數名前有#,可以使用 _ 關閉這個強制功能

     這里有四個重載的init()方法,其中有兩個方法僅僅外部參數名不同,也可以進行重載(普通函數不可以)

     

構造方法中的常量:

     常量屬性,在構造方法內部是可以變的,即構造方法執行后才是真正的常量

     注意:子類的構造方法不能修改父類常量屬性的值

  • 構造方法的分類

默認構造方法:適用于類、結構體、枚舉

     當所有的存儲屬性都有默認值時由系統自動生成

     如果存儲屬性是一個可選類型,則不必設置默認值也能具有默認構造方法,其默認值為nil

指定構造方法:顯式地寫出并且可重載,需要為每個存儲屬性初始化

便捷構造方法:內部調用其他構造方法

     需要在init()前加convenience關鍵字聲明

     只有在便捷構造方法中可以顯式調用構造方法,如:

     convenience init() {

          self.init(name:"123", age:20)

     }

可失敗構造方法:在某些情況下構造對象失敗后,返回nil

     返回nil,意味著返回值類型是一個可選類型,語法:init?()

     可失敗構造方法可以聲明為便捷構造方法

     如:

     convenience init?(age:Int) {

          self.init(name:"123", age:age)

          if ( age < 0 ) {

               return nil

          }

     }

     var p1:Person? = Person(age: 5)

     隱式解綁的可失敗構造方法,即返回值是解綁后的,語法init!()

          也就意味著返回值不再是一個可選類型,也就意味著可失敗構造方法返回nil程序會崩潰

  • 繼承中的構造過程

先來看一段代碼:

    class Animal {
        var age:Int
        init() {
            self.age = 10
            print("Animal init.")
        }
    }
    class Dog:Animal {
        var name:String
        override init() {
            self.name = "abc"
            print("Dog init.")
        }
    }
    var p = Dog()

    print("age:\(p.age) name:\(p.name)")

     輸出的結果:

          Dog init.

          Animal init.

          age:10 name:abc

     重要說明:子類的構造方法一定調用了父類的構造方法完成父類部分的初始化

父子類構造方法的調用順序:

     上面例子中,在子類的init()中并沒有顯式調用,則父類的init()實在子類init()的最后隱式調用

     存在的問題是:在子類的init()中不能訪問父類的屬性

     解決方法:子類的init()中顯式調用父類構造方法     

        override init() {
            self.name = "abc"
            super.init()
            self.age++
            print("Dog init.")

        }

     需要注意的是:顯式調用父類構造方法,必須在子類存儲屬性初始化后進行

子類也可以添加構造方法,子類構造方法內部也可以指定調用其他構造方法

    class Animal {
        var age:Int
        init() {
            self.age = 10
        }
        init(age:Int) {
            self.age = age
        }
    }
    class Dog:Animal {
        var name:String
        override init() {
            self.name = "abc"
            super.init()
            self.age++
        }
        init(age:Int, name:String) {
            self.name = name
            super.init(age: age)
        }
       
    }
    var p = Dog(age: 22, name: "ABC")

    print("age:\(p.age) name:\(p.name)")

  • 析構方法

與構造方法相反,對象即將被銷毀前,會自動調用析構方法

     a. 析構方法 deinit 不帶任何參數也沒有返回值,不用func修飾

     b. 有默認析構方法,也可以顯式寫出代替

     c. 析構方法不能重載

     d. 子類實例對象銷毀時,先調用子類的析構方法,再調用父類的析構方法

     e. 任何位置都不能顯式調用deinit

    class Animal {
        var age:Int
        init() {
            self.age = 10
        }
        init(age:Int) {
            self.age = age
        }
        deinit {
            print("Animal deinit.")
        }
    }
    class Dog:Animal {
        var name:String
        override init() {
            self.name = "abc"
            super.init()
            self.age++
        }
        init(age:Int, name:String) {
            self.name = name
            super.init(age: age)
        }
        deinit {
            print("Dog deinit")
        }
    }
    var p = Dog(age: 22, name: "ABC")

    print("age:\(p.age) name:\(p.name)")

    p = Dog()     //基于ARC機制,此時上一個Dog實例對象被銷毀

     輸出結果:

          age:22 name:ABC

          Dog deinit

          Animal deinit.


文章題目:Swift2.0(13)構造方法
URL標題:http://www.xueling.net.cn/article/ispohe.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 国产9区| 亚洲区中文字幕 | 亚洲欧美成人a毛片 | 美女在线一区二区 | 91久久精品亚洲中文字幕无码 | 99久久久国产精品免费99 | 五十老熟妇乱子伦免费观看 | 免费看片免费播放国产 | 国产艳妇AV在线观看 | 日本熟妇色一本在线观看 | 99国内精品久久久久 | 东北老女人高潮疯狂过瘾对白 | 成人依依网站亚洲综合久 | 337P大胆日本欧美人体艺术噜噜噜 | 亚洲AV成人一区二区三区观看在线 | 初尝黑人巨砲波多野结衣 | 在野外被三个男人躁爽白浆视频 | 国产在视频线精品视频 | 亚洲一区二区三区国产精品 | 丰满少妇人妻久久久久久 | 99热99精品 | 欧美在线观看第一页 | 美女爽爽影院 | 日本中文字幕一区 | 欧美孕妇色xxxxx | 在线欧美国产 | 久久久久久国产精品免费免费男同 | 国产在线一区二区三在线 | 久久精品视频69 | 91一区在线| 国精产品一二二区视频 | 字幕专区码中文欧美在线 | 天堂网在线.www天堂 | 国产91色欲麻豆精品一区二区 | 日本不卡1 | 国产口爆吞精在线视频观看 | 中国黄色一及片 | 欧美日日爱 | 偷拍25位美女撒尿bbb片户外 | 在线视频一区二区三区三区不卡 | 久久丫精品系列 |