(十五) [Swift]Swift中的optional chai

2016-08-11  本文已影响23人  修行猿

在oc中没有optional 的概念,一个对象可能有很多属性,每个属性都个能还有自己的属性。OC中可以连续调用没有任何问题,即使调用过程中出现了nil,那么整个语句都是nil。
但是在Swift中引入了Optional的概念。强制我们对有可能为nil的值解包。在上面的调用情境中就很不方便。但是好在Swift对这种情况也有了相应的支持

1.使用?来进行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()) 

链式调用

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函数

person1.flatMap({$0.card}).flatMap({$0.type}) //nil
person2.flatMap({$0.card}).flatMap({$0.type}) //nil
person3.flatMap({$0.card}).flatMap({$0.type}) //CREDIT
上一篇 下一篇

猜你喜欢

热点阅读