swift-可失敗的構(gòu)造函數(shù)

產(chǎn)生原因

1、定義類、結(jié)構(gòu)體或枚舉初始化時(shí)可以失敗
2、失敗原因,包括給初始化傳入無(wú)效的形式參數(shù)值,或缺少某種外部所需的資源,又或是其他阻止初始化的情況
3、為了處理這種可能,在類、結(jié)構(gòu)體或枚舉中定義一個(gè)或多個(gè)可失敗的構(gòu)造函數(shù)。

定義可失敗的構(gòu)造函數(shù)

通過(guò)在 init 關(guān)鍵字后面添加問(wèn)號(hào)init?
可失敗的構(gòu)造函數(shù)里面應(yīng)該有一個(gè) return nil 的語(yǔ)句(沒(méi)有也不報(bào)錯(cuò))
通過(guò)可失敗的構(gòu)造函數(shù)構(gòu)造出來(lái)的實(shí)例是一個(gè)可選型,所以配合解包

import Foundation
//【案例】普通的構(gòu)造函數(shù)
class Animal{
    var species:String
    init(species:String) {
        self.species = species
    }
}
//提問(wèn):cat1這個(gè)變量是什么類型?
var cat1 = Animal(species: "Cat")
print(cat1.species)

//【案例二】 可失敗
class Animal2{
    var species:String
    init?(species:String) {
        if species.isEmpty{//此時(shí)加條件,如果傳進(jìn)來(lái)是空值,就構(gòu)造失敗。
            return nil //一旦return nil,可選型,要加?
        }
        self.species = species
    }
}
//提問(wèn):cat2這個(gè)變量是什么類型?
//構(gòu)造成功的情況
var cat2 = Animal2(species: "cat")
//print(cat2.species)
if let cat2 = cat2{
    print(cat2.species)
}
//構(gòu)造失敗的情況
var dog = Animal2(species: "")
print(dog)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容