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)語句是在橫向挪用第①行界說的結構器署理。
結構重視載的成績明天就到這裡吧,小同伴們可以參考下示例,願望對年夜家有所贊助