您好,登錄后才能下訂單哦!
原創文章,歡迎轉載。轉載請注明:關東升的博客
構造函數作為一種特殊方法,也可以重載。
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) print("長方形:\(rectc1.width) x\(rectc1.height)") var rectc2 = Rectangle(W: 320.0, H: 480.0) print("長方形:\(rectc2.width) x\(rectc2.height)") var rectc3 =Rectangle(length: 500.0) print("長方形3:\(rectc3.width) x\(rectc3.height)") var rectc4 = Rectangle() print("長方形4:\(rectc4.width) x\(rectc4.height)")
構造函數代理
為了減少多個構造函數間的代碼重復,在定義構造函數時,可以通過調用其他構造函數來完成實例的部分構造過程,這個過程稱為構造函數代理。構造函數代理在結構體和類中使用方式是不同,先介紹結構體中構造函數代理。
將上一節的示例修改如下:
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語句 self.init(W: length, H: length) } init() { //調用了self.init語句 self.init(width: 640.0, height: 940.0) } } var rectc1 =Rectangle(width: 320.0, height: 480.0) print("長方形:\(rectc1.width) x\(rectc1.height)") var rectc2 = Rectangle(W: 320.0, H: 480.0) print("長方形:\(rectc2.width) x\(rectc2.height)") var rectc3 =Rectangle(length: 500.0) print("長方形3:\(rectc3.width) x\(rectc3.height)") var rectc4 = Rectangle() print("長方形4:\(rectc4.width) x \(rectc4.height)")
將Rectangle聲明為結構體類型,其中也有4個構造函數重載。
這種在同一個類型中通過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) print("長方形:\(rectc1.width) x\(rectc1.height)") var rectc2 = Rectangle(W: 320.0, H: 480.0) print("長方形:\(rectc2.width) x\(rectc2.height)") var rectc3 =Rectangle(length: 500.0) print("長方形3:\(rectc3.width) x\(rectc3.height)") var rectc4 = Rectangle() print("長方形4:\(rectc4.width) x\(rectc4.height)")
將Rectangle聲明為類,其中也有4個構造函數重載。
歡迎關注關東升新浪微博@tony_關東升。
關注智捷課堂微信公共平臺,了解最新技術文章、圖書、教程信息
更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com
智捷課堂論壇網站:http://51work6.com/forum.php
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。