你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 《從零開始學Swift》學習筆記(Day 39)——構造函數重載

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

編輯:IOS開發綜合
構造函數作為一種特殊方法,也可以重載。
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個構造函數重載。
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved