程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Swift進修筆記之結構重視載

Swift進修筆記之結構重視載

編輯:更多關於編程

Swift進修筆記之結構重視載。本站提示廣大學習愛好者:(Swift進修筆記之結構重視載)文章只能為提供參考,不一定能成為您想要的結果。以下是Swift進修筆記之結構重視載正文


與函數一樣,辦法也存在重載,其重載的方法與函數分歧。那末作為結構器的特別辦法,能否也存在重載呢?謎底是確定的。

1、結構重視載概念

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個結構器,其他是重載關系。從參數個數和參數類型上看,第①行和第②行的結構器是一樣的,然則它們的內部參數名分歧,所以在第⑤行挪用的是第①行的結構器,第⑥行挪用的是第②行的結構器。
第③行和第④行的結構器參數個數與第①行分歧,所以在第⑦行挪用的是第③行的結構器,第④行挪用的是第⑧行的結構器。

2、值類型結構器署理

為了削減多個結構器間的代碼反復,在界說結構器時,可以經由過程挪用其他結構器來完成實例的部門結構進程,這個進程稱為結構器署理。結構器署理在值類型和援用類型中應用方法分歧,本節我們先引見值類型結構器署理。
將上一節的示例修正以下:


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語句停止挪用就是我們說的結構器署理。

3、援用類型結構器橫向署理

援用類型結構器署理就是類結構器署理。因為類有繼續關系,類結構器署理比擬龐雜,分為橫向署理和向上署理。
        橫向署理相似於值類型結構器署理,產生在統一類外部,這類結構器稱為方便結構器(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)語句是在橫向挪用第①行界說的結構器署理。

結構重視載的成績明天就到這裡吧,小同伴們可以參考下示例,願望對年夜家有所贊助

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved