在oc中沒有optional 的概念雁芙,一個對象可能有很多屬性肥照,每個屬性都個能還有自己的屬性鸠信。OC中可以連續(xù)調(diào)用沒有任何問題,即使調(diào)用過程中出現(xiàn)了nil攒岛,那么整個語句都是nil赖临。
但是在Swift中引入了Optional的概念。強(qiáng)制我們對有可能為nil的值解包灾锯。在上面的調(diào)用情境中就很不方便兢榨。但是好在Swift對這種情況也有了相應(yīng)的支持
1.使用?來進(jìn)行optional chaining
場景
enum Type {
case CREDIT
case DEPOSIT
}
class BankCard {
var type : Type = .CREDIT
}
class Person {
var card: BankCard?
init(card:BankCard? = nil){
self.card = card
}
}
var person1 : Person? = nil
var person2 : Person? = Person(card:nil)
var person3 : Person? = Person(card:BankCard())
鏈?zhǔn)秸{(diào)用
person1?.card?.type //nil
person2?.card?.type //nil
person3?.card?.type //CREDIT
2.重載操作符
infix operator => {associativity left}
func => <T,U>(opt: T?,f: T -> U?) -> U? {
switch opt {
case .Some(let t):
return f(t)
case .None :
return .None
}
}
person1=>{$0.card}=>{$0.type} //nil
person2=>{$0.card}=>{$0.type} //nil
person3=>{$0.card}=>{$0.type} //CREDIT
3.使用flatMap函數(shù)
person1.flatMap({$0.card}).flatMap({$0.type}) //nil
person2.flatMap({$0.card}).flatMap({$0.type}) //nil
person3.flatMap({$0.card}).flatMap({$0.type}) //CREDIT