1.定義類旦袋、結構體或枚舉初始化時可以失敗
2.失敗原因骤菠,包括給初始化傳入無效的形式參數(shù)值,或缺少某種外部所需的資源猜憎,又或是其他阻止初始化的情況
3.為了處理這種可能娩怎,在類、結構體或枚舉中定義一個或多個可
失敗的構造函數(shù)胰柑。通過在 init 關鍵字后面添加問號init?
可失敗的構造函數(shù)里面應該有一個 return nil 的語句(雖然沒有也不報錯)
通過可失敗的構造函數(shù)構造出來的實例是一個可選型
struct Animal {
let species: String
init?(species: String) {
// 返回一個nil
if species.isEmpty { return nil }
self.species = species
}
}
//返回的類型是當前類型的可選型
let cat = Animal(species: "CAT")
if let cat = cat {
cat.species
}
let dog = Animal(species: "")
if let dog = dog {
dog.species
}
import Foundation
//【案例】普通的構造函數(shù)
class Animal{
var species:String
init(species:String) {
self.species = species
}
}
//提問:cat1這個變量是什么類型?
var cat1 = Animal(species: "Cat")
print(cat1.species)
//【案例二】 可失敗
class Animal2{
var species:String
init?(species:String) {
if species.isEmpty{//此時加條件爬泥,如果傳進來是空值柬讨,就構造失敗。
return nil //一旦return nil袍啡,可選型踩官,要加?
}
self.species = species
}
}
//提問:cat2這個變量是什么類型境输?
//構造成功的情況
var cat2 = Animal2(species: "cat")
//print(cat2.species)
if let cat2 = cat2{
print(cat2.species)
}
//構造失敗的情況
var dog = Animal2(species: "")
print(dog)