Swift構造器重載,swift構造重載

來源:互聯網
上載者:User

Swift構造器重載,swift構造重載
與函數一樣,方法也存在重載,其重載的方式與函數一致。那麼作為構造器的特殊方法,是否也存在重載呢?答案是肯定的。
一、構造器重載概念
Swift中函數重載的條件也適用於構造器,條件如下:
函數有相同的名字;
參數列表不同或傳回值類型不同,或外部參數名不同;
Swift中的構造器可以滿足以下兩個條件,代碼如下:

class Rectangle {        var width : Double    var height : Double        init(width : Double, height : Double) {①        self.width   = width        self.height  = height    }        init(W width : Double,H height : Double) {②        self.width   = width        self.height  = height    }        init(length : Double) {③        self.width   = length        self.height  = length    }    init() {④        self.width   = 640.0        self.height  = 940.0    }}var rectc1 = Rectangle(width : 320.0, height : 480.0)⑤println("長方形:\(rectc1.width) x \(rectc1.height)")var rectc2 = Rectangle(W : 320.0, H : 480.0)⑥println("長方形:\(rectc2.width) x \(rectc2.height)")var rectc3 = Rectangle(length: 500.0)⑦println("長方形3:\(rectc3.width) x \(rectc3.height)")var rectc4 = Rectangle()⑧println("長方形4:\(rectc4.width) x \(rectc4.height)")


上述代碼第①~④行定義了4個構造器,其他是重載關係。從參數個數和參數類型上看,第①行和第②行的構造器是一樣的,但是它們的外部參數名不同,所以在第⑤行調用的是第①行的構造器,第⑥行調用的是第②行的構造器。
第③行和第④行的構造器參數個數與第①行不同,所以在第⑦行調用的是第③行的構造器,第④行調用的是第⑧行的構造器。
二、實值型別構造器代理
為了減少多個構造器間的代碼重複,在定義構造器時,可以通過調用其他構造器來完成執行個體的部分構造過程,這個過程稱為構造器代理。構造器代理在實值型別和參考型別中使用方式不同,本節我們先介紹實值型別構造器代理。
將上一節的樣本修改如下:
struct Rectangle {    var width : Double    var height : Double        init(width : Double, height : Double) {①        self.width   = width        self.height  = height    }        init(W width : Double,H height : Double) {②        self.width   = width        self.height  = height    }        init(length : Double) {③        self.init(W : length, H : length)    }    init() {④        self.init(width: 640.0, height: 940.0)    }}var rectc1 = Rectangle(width : 320.0, height : 480.0)⑤println("長方形:\(rectc1.width) x \(rectc1.height)")var rectc2 = Rectangle(W : 320.0, H : 480.0)⑥println("長方形:\(rectc2.width) x \(rectc2.height)")var rectc3 = Rectangle(length: 500.0)⑦println("長方形3:\(rectc3.width) x \(rectc3.height)")var rectc4 = Rectangle()⑧println("長方形4:\(rectc4.width) x \(rectc4.height)")

將Rectangle聲明為結構體類型,其中也有4個構造器重載。在第③行和第④行的構造器中使用了self.init語句,self指示當前執行個體本身,init是本身的構造器,第③行的self.init(W : length, H : length)語句是在調用第②行定義的構造器,第④行的self.init(width: 640.0, height: 940.0)語句是在調用第①行定義的構造器。
這種在同一個類型中通過self.init語句進行調用就是我們說的構造器代理。
三、參考型別構造器橫向代理
參考型別構造器代理就是類構造器代理。由於類有繼承關係,類構造器代理比較複雜,分為橫向代理和向上代理。
橫向代理類似於實值型別構造器代理,發生在同一類內部,這種構造器稱為便利構造器(convenience initializers)。
向上代理髮生在繼承情況下,在子類構造過程中要先調用父類構造器,初始化父類的儲存屬性,這種構造器稱為指定構造器(designated initializers)。
由於我們還沒有介紹繼承,因此本章只介紹橫向代理。
將上一節的樣本修改如下:
class Rectangle {    var width : Double    var height : Double        init(width : Double, height : Double) {①        self.width   = width        self.height  = height    }        init(W width : Double,H height : Double) {②        self.width   = width        self.height  = height    }        convenience init(length : Double) {③        self.init(W : length, H : length)    }    convenience init() {④        self.init(width: 640.0, height: 940.0)    }}var rectc1 = Rectangle(width : 320.0, height : 480.0)⑤println("長方形:\(rectc1.width) x \(rectc1.height)")var rectc2 = Rectangle(W : 320.0, H : 480.0)⑥println("長方形:\(rectc2.width) x \(rectc2.height)")var rectc3 = Rectangle(length: 500.0)⑦println("長方形3:\(rectc3.width) x \(rectc3.height)")var rectc4 = Rectangle()⑧println("長方形4:\(rectc4.width) x \(rectc4.height)")

將Rectangle聲明為類,其中也有4個構造器重載。在第③行和第④行的構造器中使用了self.init語句,並且在構造器前面加上了convenience關鍵字,convenience表示便利構造器,這說明我們定義構造器是橫向代理調用其他構造器。

第③行的self.init(W : length, H : length)語句是在橫向調用第②行定義的構造器代理,第④行的self.init(width: 640.0, height: 940.0)語句是在橫向調用第①行定義的構造器代理。



更多內容請關注國內第一本Swift圖書《Swift開發指南》本書交流討論網站:http://www.51work6.com/swift.php歡迎加入Swift技術討論群:362298485

歡迎關注智捷iOS課堂公用平台



什是重載的構造器?

就是類裡面有跟類名稱一樣的方法,但是參數不一樣,有多有少,也可以沒有參數
 
java中,方法重載與構造器重載一樣?

構造器名必須和類名一樣,方法重載就沒這個要求了
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.