構造函數的主要作用是初始化實例,其中包括:初始化存儲屬性和其它的初始化。在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()
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)")