美文网首页
Swift Optional ( 可选类型 ) 总结

Swift Optional ( 可选类型 ) 总结

作者: 木叔勒 | 来源:发表于2016-08-18 23:11 被阅读690次

    一、Optional 定义归纳

    (1).Swift中声明一个变量或常量时需要返回nil。
    (2).Swift中基础类型如整型、布尔等可空时为nil。
    (3).Swift中nil也代表一个值:空值。
    (4).OC中的nil和Swift有一些需求,OC只有对象才能为nil。
    (5).当我们需要定义一个可空的变量或常量时,Optional就发挥作用了,在 Swift中定于常量或变量时如果类型不是Optional是不能为nil的。

    二、Optional 声明

    **定义可选类型只需要在类型后面加上 ( ? ) **
    有以下几种声明方法:

    //1.使用Optional声明(可选类型是一个枚举)
    var name:Optional<String>
    //1.赋值
    name = Optional("Danny")
    
    //2.常用声明
    var age:Int?
    //2.赋值
    age = 17
    
    //3.常量声明
    let notes:NSString?
    //3.赋值(常量只能赋一次值)
    notes = "this is test"
    

    三、Optional 拆包

    (1).为什么我们要对Optional拆包
    申明为Optional后,不拆包的格式是被Optional包住的:Optional("Danny");实际上我们需要使用的是Danny这个值,所以需要拆包得到
    (2).拆包分为:显式拆包和隐式拆包

    1.显式拆包

    在我们事先声明好的Optional类型名后面加( !)

    //声明
    var name:String? = "Danny"
    //显式拆包
    print(name!)
    
    
    2.隐式拆包

    当我们确定该变量一定会有值的时候在类型后面加( ! )

    //确定name一定会有值
    var name:String!= "Danny"
    
    

    四、Optional Binding

    (1).判断一个可选类型是否为nil,通常写法是下面这种

    var name:String? = "Danny"
    
    if name != nil {
        print("not nil")
    }else{
        print("nil")
    }
    
    

    (2).判断一个可选类型是否为nil并且我们需要使用该可选类型怎么办呢?

    var name:String? = "Danny"
    
    if name != nil {
        print(name!) //使用 !拆包
    }else{
        print("nil")
    }
    
    

    (3).接上(2)如果我们需要使用多次使用到name?难道要多次使用!拆包吗?答案是肯定这种方法不可取的,下面这种方法表示只进行一次拆包。

    var name:String? = "Danny"
    
    if let letName = name {
        print(letName)
    }else{
        print("nil")
    }
    

    说明:通过在条件判断语句中把Optional值直接给一个临时常量,Swift会自动检测Optional是否包含值,如果包含值,会隐式的拆包并给那个临时常量,在接下来的上下文中就能直接使用这个临时常量了

    四、Optional Chaining

    可选链主要的应用场景是比较复杂的对方,如果一个对象中的属性包含了一个对象,子对象中的属性又包含了一个对象,这样就形成了可选链,可空返回nil。

    class Person {
        var myPet:Dog?
    
    }
    class Dog{
        var myToy:Toy?
     
    }
    class Toy {
        var name = "name"
        
        init(name:String){
            self.name = name;
        }
    }
    
    let denny = Person();
    denny.myPet = Dog();
    denny.myPet?.myToy = Toy(name: "Ball")
    if let toy = denny.myPet?.myToy{
        toy.name
    }
    

    注意:整条链上只要有一个Optional返回nil,则整条链都为nil

    相关文章

      网友评论

          本文标题:Swift Optional ( 可选类型 ) 总结

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