美文网首页
(十五) [Swift]Swift中的optional chai

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

作者: 修行猿 | 来源:发表于2016-08-11 07:30 被阅读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
    

    相关文章

      网友评论

          本文标题:(十五) [Swift]Swift中的optional chai

          本文链接:https://www.haomeiwen.com/subject/ttnjsttx.html