溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

《從零開(kāi)始學(xué)Swift》學(xué)習(xí)筆記(Day 38)——構(gòu)造函數(shù)與存儲(chǔ)屬性初始化

發(fā)布時(shí)間:2020-03-11 17:14:41 來(lái)源:網(wǎng)絡(luò) 閱讀:607 作者:tony關(guān)東升 欄目:移動(dòng)開(kāi)發(fā)

原創(chuàng)文章,歡迎轉(zhuǎn)載。轉(zhuǎn)載請(qǐng)注明:關(guān)東升的博客 

構(gòu)造函數(shù)的主要作用是初始化實(shí)例,其中包括:初始化存儲(chǔ)屬性和其它的初始化。在Rectangle類或結(jié)構(gòu)體中,如果在構(gòu)造函數(shù)中初始化存儲(chǔ)屬性widthheight后,那么在定義他們時(shí)就不需要初始化了。

Rectangle類代碼如下:

class Rectangle {
    var width: Double
    var height: Double
    
    init() {
        width  = 0.0
        height = 0.0
    }
}


如果存儲(chǔ)屬性在構(gòu)造函數(shù)中沒(méi)有初始化,在定義的時(shí)候也沒(méi)有初始化,那么就會(huì)發(fā)生編譯錯(cuò)誤。

構(gòu)造函數(shù)還可以初始化常量存儲(chǔ)屬性,下面我們看示例代碼:

class Employee {         
    let no: Int               //常量類型屬性。曾講過(guò)常量只能在定義的同時(shí)賦值,而在構(gòu)造函數(shù)中,常量屬性可以不遵守這個(gè)規(guī)則
    var name: String?     //存儲(chǔ)屬性一般在定義的時(shí)候初始化。如果不能確定初始值,可以采用可選類型屬性
    var job: String?      //存儲(chǔ)屬性
    var salary: Double        
    var dept: Department?//存儲(chǔ)屬性
    
    init() {              
        no = 0                 //在構(gòu)造函數(shù)中賦值,這種賦值不能放在普通方法中
        salary = 0.0       
        dept = nil         
    }
}
 
struct Department {      
    let no: Int               //常量類型屬性
    var name: String     
 
    init() {              
        no = 10            //在構(gòu)造函數(shù)中賦值,這種賦值不能放在普通方法中
        name = "SALES"     
    }
}
 
let dept = Department()
var emp = Employee()

 

使用外部參數(shù)名

為了增強(qiáng)程序的可讀性,Swift中的方法和函數(shù)可以使用外部參數(shù)名。在構(gòu)造函數(shù)中也可以使用外部參數(shù)名。構(gòu)造函數(shù)中的外部參數(shù)名要比一般的方法和函數(shù)更有意義,由于構(gòu)造函數(shù)命名都是init,如果一個(gè)類型中有多個(gè)構(gòu)造函數(shù),我們可以通過(guò)不同的外部參數(shù)名區(qū)分調(diào)用不同的構(gòu)造函數(shù)。

下面看示例代碼:

class RectangleA {
    var width: Double
    var height: Double
    
    init(W width: Double,H height: Double){  //定義構(gòu)造函數(shù)有兩個(gè)參數(shù)width和height,并且為參數(shù)提供了外部參數(shù)名W和H。
        self.width   = width        //函數(shù)參數(shù)賦值給屬性
        self.height  = height  //
    }
}
 
var recta = RectangleA(W: 320, H: 480)       //創(chuàng)建RectangleA實(shí)例,這里使用了外部參數(shù)名
print("長(zhǎng)方形A:\(recta.width) x \(recta.height)")


這里我們定義的是類,但也完全適用于結(jié)構(gòu)體。

構(gòu)造函數(shù)中的局部參數(shù)名可以直接作為外部參數(shù)名使用。

下面看示例代碼:

class RectangleB {
    var width: Double
    var height: Double
    
    init(width: Double, height: Double){//構(gòu)造函數(shù),其中沒(méi)有聲明外部參數(shù)名。
        self.width   = width
        self.height  = height
    }
}
 
var rectb =RectangleB(width: 320,height: 480) //代碼調(diào)用構(gòu)造函數(shù)時(shí),我們使用了外部參數(shù)名width和height,這些外部參數(shù)名就是局部參數(shù)名
print("長(zhǎng)方形B:\(rectb.width) x\(rectb.height)")


 

歡迎關(guān)注關(guān)東升新浪微博@tony_關(guān)東升。
關(guān)注智捷課堂微信公共平臺(tái),了解最新技術(shù)文章、圖書(shū)、教程信息
                              《從零開(kāi)始學(xué)Swift》學(xué)習(xí)筆記(Day 38)——構(gòu)造函數(shù)與存儲(chǔ)屬性初始化

更多精品iOSCocos、移動(dòng)設(shè)計(jì)課程請(qǐng)關(guān)注智捷課堂官方網(wǎng)站:http://www.zhijieketang.com
智捷課堂論壇網(wǎng)站:http://51work6.com/forum.php

 


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI