美文网首页
Swift ! ? 应用

Swift ! ? 应用

作者: Buddha_like | 来源:发表于2018-02-01 19:17 被阅读0次

    一:先说? 和 ! 是什么

    ? 和 ! 其实分别是Swift语言中对一种可选类型( Optional) 操作的语法糖。 那可选类型是干什么的呢? Swift中是可以声明一个没有初始值的属性, Swift中引入了可选类型(Optional)来解决这一问题。它的定义是通过在类型生命后加加一个 ? 操作符完成的。

    二 :? 和 ! 使用
    先用几行代码简单展示下
    let name : String?
    let sex : String!
    我们看到声明一个常量(变量)后面加上? !其实都可以编译通过,目前两个值都为nil
    那我们在看一下调用的时候有什么区别,我们就用最简单的print()来分别打印不同情况
    name = "asdasd"
    sex = "asdasd"
    print(name ?? 为nil情况处理")
    print(name!)
    print(sex ?? "asd")
    print(sex!)
    print(sex)
    我们看到 当调用 用?生成的name的时候,有两种情况可以
    第一种是 值 + ?? + "为nil情况处理"
    这句代码运行的含义是当你用 ?? 调用用 ? 生成的常量(变量)时,如果当前的值为nil ,则会直接跳过 ?? 前面的方法,直接调用??后面的方法.
    第二种是 !
    这句代码运行的含义是当你用 ! 调用用 ? 生成的常量(变量)
    ! 代表了硬解包,意味者这个变量(常量)肯定有值,如果没有值 会crash 所以我们在用!拆包时,一定要注意你这个值是否为空

    我们再看当调用 用!生成的sex的时候的情况
    第一种
    print(sex ?? "asd")
    这个跟上边代表的含义是一样的,不多说
    我们主要看
    print(sex!)
    print(sex)
    这两个方法
    变量(常量)后面!可加可不加
    这代表了当你用!去生成一个变量(常量) 在每次对这种类型的值操作时,都会自动在操作前补上一个!进行拆包,然后在执行后面的操作,当然如果该值是nil,依然会crash

    最后做个简单总结

    声明:
    (1)告诉编译器这个是Optional的,如果不赋值,初始化为nil.
    调用:
    当用?? 表示当值不为nil ,调用此变量,为nil时,执行?? 后面的方法 .
    当用! 强行拆包,有值则可执行.为nil时则crash.

    !
    声明:
    (1)告诉编译器这个是Optional的,如果不赋值,初始化为nil.之后对此操作,都隐式的进行硬解包
    调用:
    (1)当用?? 表示当值不为nil ,调用此变量,为nil时,执行?? 后面的方法 .
    (2)当直接调用不加 ? !则隐隐式的进行强行拆包,有值则可执行.为nil时则crash.

    注:写的比较匆忙,如果有疑问,或者我表述有问题,希望及时指出,在做修改!

    相关文章

      网友评论

          本文标题:Swift ! ? 应用

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