類,結(jié)構(gòu)和枚舉當(dāng) Swift 聲明后準(zhǔn)備初始化類實(shí)例。初始值被初始化為存儲(chǔ)屬性,并且新的實(shí)例的值也被進(jìn)一步進(jìn)行初始化。創(chuàng)建初始化函數(shù)的關(guān)鍵字是通過(guò) init() 方法。Swift 初始化不同于 Objective-C,它不返回任何值。其作用是檢查新創(chuàng)建的實(shí)例的其處理前初始化。Swift 還提供了“反初始化”過(guò)程中執(zhí)行的內(nèi)存管理操作當(dāng)實(shí)例被釋放。
存儲(chǔ)的屬性處理實(shí)例之前初始化類和結(jié)構(gòu)的實(shí)例。 存儲(chǔ)屬性使用初始分配和初始化值,從而消除了需要調(diào)用屬性觀察者。 初始化用于存儲(chǔ)屬性:
創(chuàng)建初始值
要在屬性定義中指定默認(rèn)屬性值
為特定的數(shù)據(jù)類型,初始化實(shí)例 init()方法被使用,init()函數(shù)沒(méi)有傳遞參數(shù)。
init() { //New Instance initialization goes here }
struct rectangle { var length: Double var breadth: Double init() { length = 6 breadth = 12 } } var area = rectangle() println("area of rectangle is \(area.length*area.breadth)")
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。
area of rectangle is 72.0
這里結(jié)構(gòu) 'rectangle' 使用成員長(zhǎng)寬高為 “double” 的數(shù)據(jù)類型進(jìn)行初始化。init()方法被用于為新創(chuàng)建的成員的長(zhǎng)度和初始化double 類型的數(shù)值。 計(jì)算長(zhǎng)方形的面積,并通過(guò)調(diào)用矩形函數(shù)返回。
Swift 語(yǔ)言提供 init()函數(shù)來(lái)初始化存儲(chǔ)的屬性值。此外,用戶必須規(guī)定默認(rèn)在聲明類或結(jié)構(gòu)的成員初始化屬性值。當(dāng)屬性的值在整個(gè)程序中時(shí)一樣時(shí),我們可以在聲明部分單獨(dú)聲明它,而不是在 init()中初始化。默認(rèn)情況下,用戶設(shè)置屬性值時(shí)能夠繼承被定義為類或結(jié)構(gòu)。
struct rectangle { var length = 6 var breadth = 12 } var area = rectangle() println("area of rectangle is \(area.length*area.breadth)")
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。
area of rectangle is 72.0
在這里,代替聲明長(zhǎng)和寬在 init()中,在聲明本身時(shí)就初始化值了。
在 Swfit 語(yǔ)言用戶提供以初始化參數(shù)初始化,使用定義作為 init()的一部分。
struct Rectangle { var length: Double var breadth: Double var area: Double init(fromLength length: Double, fromBreadth breadth: Double) { self.length = length self.breadth = breadth area = length * breadth } init(fromLeng leng: Double, fromBread bread: Double) { self.length = leng self.breadth = bread area = leng * bread } } let ar = Rectangle(fromLength: 6, fromBreadth: 12) println("area is: \(ar.area)") let are = Rectangle(fromLeng: 36, fromBread: 12) println("area is: \(are.area)")
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。
area is: 72.0 area is: 432.0
初始化參數(shù)具有類似于的函數(shù)和方法參數(shù)局部和全局參數(shù)名稱。局部參數(shù)聲明用于初始化體,外部參數(shù)聲明訪問(wèn)用于調(diào)用初始化。Swift 函數(shù)初始化和方法不同,它們不識(shí)別哪些初始化用于該函數(shù)調(diào)用。
為了克服這個(gè)問(wèn)題,Swift 引入了一個(gè)自動(dòng)外部名稱為 init()的每個(gè)參數(shù)。 這種自動(dòng)外部名稱是等同的每一個(gè)初始化參數(shù)局部名字之前寫入。
struct Days { let sunday, monday, tuesday: Int init(sunday: Int, monday: Int, tuesday: Int) { self.sunday = sunday self.monday = monday self.tuesday = tuesday } init(daysofaweek: Int) { sunday = daysofaweek monday = daysofaweek tuesday = daysofaweek } } let week = Days(sunday: 1, monday: 2, tuesday: 3) println("Days of a Week is: \(week.sunday)") println("Days of a Week is: \(week.monday)") println("Days of a Week is: \(week.tuesday)") let weekdays = Days(daysofaweek: 4) println("Days of a Week is: \(weekdays.sunday)") println("Days of a Week is: \(weekdays.monday)") println("Days of a Week is: \(weekdays.tuesday)")
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果。
Days of a Week is: 1 Days of a Week is: 2 Days of a Week is: 3 Days of a Week is: 4 Days of a Week is: 4 Days of a Week is: 4
當(dāng)外部名稱不需要一個(gè)初始化下劃線“_”,這是用來(lái)覆蓋默認(rèn)行為。
struct Rectangle { var length: Double init(frombreadth breadth: Double) {上一篇:Swift區(qū)間運(yùn)算符下一篇:Swift檢驗(yàn)協(xié)議的一致性