《從零開始學Swift》學習筆記(Day 38)——建構函式與儲存屬性初始化

智捷關東昇發表於2016-03-21

原創文章,歡迎轉載。轉載請註明:關東昇的部落格

  建構函式的主要作用是初始化例項,其中包括:初始化儲存屬性和其它的初始化。在Rectangle類或結構體中,如果在建構函式中初始化儲存屬性width和height後,那麼在定義他們時就不需要初始化了。
   Rectangle類程式碼如下:

class Rectangle {
    var width: Double
    var height: Double

    init() {
    width   = 0.0
    height  = 0.0
    }

}

   如果儲存屬性在建構函式中沒有初始化,在定義的時候也沒有初始化,那麼就會發生編譯錯誤。   建構函式還可以初始化常量儲存屬性,下面我們看示例程式碼:

class Employee {            
    let no: Int                //常量型別屬性。曾講過常量只能在定義的同時賦值,而在建構函式中,常量屬性可以不遵守這個規則
    var name: String?        //儲存屬性一般在定義的時候初始化。如果不能確定初始值,可以採用可選型別屬性
    var job: String?        //儲存屬性
    var salary: Double        
    var dept: Department?    //儲存屬性

    init() {                    
    no = 0                    //在建構函式中賦值,這種賦值不能放在普通方法中
    salary = 0.0        
    dept = nil            
    }
}

struct Department {        
    let no: Int                //常量型別屬性
    var name: String         

    init() {                    
    no = 10                //在建構函式中賦值,這種賦值不能放在普通方法中
    name = "SALES"        
    }
}

let dept = Department()
var emp = Employee()

使用外部引數名 
  為了增強程式的可讀性,Swift中的方法和函式可以使用外部引數名。在建構函式中也可以使用外部引數名。建構函式中的外部引數名要比一般的方法和函式更有意義,由於建構函式命名都是init,如果一個型別中有多個建構函式,我們可以通過不同的外部引數名區分呼叫不同的建構函式。
  下面看示例程式碼:

class RectangleA {
    var width: Double
    var height: Double

    init(W width: Double,H height: Double) {    //定義建構函式有兩個引數width和height,並且為引數提供了外部引數名W和H。
    self.width   = width        //函式引數賦值給屬性
    self.height  = height    //
    }
}

var recta = RectangleA(W: 320, H: 480)        //建立RectangleA例項,這裡使用了外部引數名

print("長方形A:(recta.width) x (recta.height)")

  這裡我們定義的是類,但也完全適用於結構體。
   建構函式中的區域性引數名可以直接作為外部引數名使用。
  下面看示例程式碼:

class RectangleB {
    var width: Double
    var height: Double

    init(width: Double, height: Double) {    //建構函式,其中沒有宣告外部引數名。
    self.width   = width
    self.height  = height
    }
}

var rectb = RectangleB(width: 320, height: 480)     //程式碼呼叫建構函式時,我們使用了外部引數名width和height,這些外部引數名就是區域性引數名
print("長方形B:\(rectb.width) x \(rectb.height)")

歡迎關注關東昇新浪微博@tony_關東昇。 關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程資訊

enter image description here

更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com 智捷課堂論壇網站:http://51work6.com/forum.php

相關文章