《從零開始學Swift》學習筆記(Day 39)——構造函數重載

原創文章,歡迎轉載。轉載請註明:關東昇的博客  php

構造函數做爲一種特殊方法,也能夠重載。java

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)")

 

構造函數代理網站

爲了減小多個構造函數間的代碼重複,在定義構造函數時,能夠經過調用其餘構造函數來完成實例的部分構造過程,這個過程稱爲構造函數代理。構造函數代理在結構體和類中使用方式是不一樣,先介紹結構體中構造函數代理。spa

將上一節的示例修改以下:.net

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語句進行調用當前類型其它構造函數,其它構造函數被稱爲構造函數代理。代理

 

類構造函數橫向代理code

因爲類有繼承關係,類構造函數代理比較複雜,分爲橫向代理和向上代理。

  • 橫向代理相似於結構體類型構造函數代理,發生在同一類內部,這種構造函數稱爲便利構造函數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_ 關東昇。
關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息
      
    
更多精品iOSCocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com
智捷課堂論壇網站:http://51work6.com/forum.php

相關文章
相關標籤/搜索