天天看點

構造器

        結構體和類在建立執行個體的過程中需要進行一些初始化的工作,這個過程稱為構造過程。相反,在這些執行個體最後被釋放的時候需要進行一些資源清除的工作,這個過程稱為析構過程。

        結構體和類的執行個體在構造的過程中會調用一種特殊方法,稱為構造器,構造器init沒有傳回值,可以重載,在多個構造器重載的情況下,運作環境可以根據它的外部參數或參數清單調用合适的構造器。類似的方法在object-c中稱為構造方法,在c++中稱為構造函數,object-c中的構造方法有傳回值,而c++中的構造函數名必須與類名相同,沒有傳回值。

一、預設構造器

        結構體和類在構造過程中都會調用一個構造器,即便是沒有編寫任何的構造器,也存在一個預設的構造器

        1、類預設構造器

         事實上,在rectangle的定義過程中省略了構造器,相當于如下代碼

        2、結構體預設構造器

                    而結構體rectangle的預設構造器與類rectangle的構造器是不同的,相當于如下代碼:

二、構造器與存儲屬性初始化

        1、初始化存儲屬性

            構造器的主要作用就是初始化存儲屬性,在init()構造器中初始化存儲屬性width和height後,那麼在定義它們時就不需要初始化了;

            如果存儲屬性在構造器中沒有初始化,在定義的時候也沒有初始化,那麼在編譯的時候會出錯;

    2、初始化常量存儲屬性

            存儲屬性一般在定義的時候初始化,如果不能确定初始值,可以采用可選類型屬性,或者也可以在構造器中初始化。

三、使用外部參數名

        1、外部參數名

        為了增強程式的可讀性,swift的方法和函數可以使用外部參數名,在構造器中也可以使用外部參數名,構造器中的外部參數名要比一般的方法和和函數更有意義,由于構造器命名都是init,如果一個對象類型中有多個構造器,我們就可以通過不同的外部的參數名區分不同的構造函數

          2、簡化外部參數名

                外部參數名可以簡化,在函數中可以在參數前加#,使得局部參數名變成外部參數名,但在構造器中就不用這麼麻煩,構造器中的局部參數名可以直接作為外部參數名使用: