Swift中初始化方法的順序介紹_Swift

來源:互聯網
上載者:User

與 Objective-C 不同,Swift 的初始化方法需要保證類型的所有屬性都被初始化。所以初始化方法的調用順序就很有講究。在某個類的子類中,初始化方法裡語句的順序並不是隨意的,我們需要保證在當前子類執行個體的成員初始化完成後才能調用父類的初始化方法:

複製代碼 代碼如下:

class Cat {
    var name: String
    init() {
        name = "cat"
    }
}

class Tiger: Cat {
    let power: Int
    override init() {
        power = 10
        super.init()
        name = "tiger"
    }
}


一般來說,子類的初始化順序是:

1.設定子類自己需要初始化的參數,power = 10
2.調用父類的相應的初始化方法,super.init()
3.對父類中的需要改變的成員進行設定,name = "tiger"

其中第三步是根據具體情況決定的,如果我們在子類中不需要對父類的成員做出改變的話,就不存在第 3 步。而在這種情況下,Swift 會自動地對父類的對應 init 方法進行調用,也就是說,第 2 步的 super.init() 也是可以不用寫的 (但是實際上還是調用的,只不過是為了簡便 Swift 幫我們完成了)。這種情況下的初始化方法看起來就很簡單:

複製代碼 代碼如下:

class Cat {
    var name: String
    init() {
        name = "cat"
    }
}

class Tiger: Cat {
    let power: Int
    override init() {
        power = 10
        // 雖然我們沒有顯式地對 super.init() 進行調用
        // 不過由於這是初始化的最後了,Swift 替我們完成了
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.