swift可选型之一

可选型Optional

  • 什么是可选型

在swift里面出现了一个全新的类型-可选型。那什么是可选项呢?个人的理解就是说一个变量或者常量"可有可无",也就是可以为具体的某个值,也可以为空也就是nil。

  • 如何定义一个可选型

var say: String? = "Hi swift"

上边定义一个字符串的可选型,在类型后边加上一个问号就表示字符串的可选型,同理其它类型的也是在类型后边加问号就变为相应的可选型了。

  • 可选型的解包
  1. 当我们对可选型进行操作的时候,比如两个字符串相加。如何我们不对可选型进行解包,直接用
    "2016.7.28 " + say

    那么系统就会报错打印信息

    Playground execution failed: /var/folders/2m/4f8gwn750rn0vvz2n6rgg8tc0000gn/T/./lldb/2216/playground177.swift:7:16: error: value of optional type 'String?' not unwrapped; did you mean to use '!' or '?'?
    "2016.7.28 " + say
                   ^
                      !

    提示你是否用"!"和"?"来解包。当我们在say后边加上"!"(加问号的解包后边说),错误提示就不存在了。就变成这样了

    "2016.7.28 " + say!

    但是用"!"的前提是你确认say的字符串为非nil,如果为nil那么程序还是会崩,这种解包方式叫强制解包,存在一定的风险,开发中尽量少用。我们用到最多的还是下面这种解包方式

    if let say = say {
        "2016.7.28 " + say
    }

    这句代码我解释一下,使用if let 语句的意思就是我们尝试对后边那个say字符串进行解包,当say为非nil的时候我们把解包的值赋值为第一个say,以便我们在if语句内使用。只有当解包的数据为非nil时,程序才会进入if内部语句执行。这边为啥可以有两个相同的变量名,这里是swift所允许的,第一个say为if的局部变量,当程序执行完if语句后,第一个say就释放掉了。其实跟OC和C语言一样,一个可以看做是局部变量,一个可以看做是全局变量。当解包失败的时候我们什么都不做,你也可以在后边添加一个else语句进行解包失败的处理。

  2. 还有一种方式使用"??"对可选型进行解包
    var say: String? = "Hi swift"
    var saySomeThing = say ?? "Noting"
    print(saySomeThing)
    打印效果
    Hi swift

    var saySomeThing = say ?? "Noting"这句代码中用到的"??"的作用是我们尝试对say进行解包,如果say能解包,也就是非nil,我们就把解包后的值赋值给

    saySomeThing,如何解包后say为nil,那么我们就两个问号后边的值赋值给saySomeThing。(此时say的值不变还是nil,而不是问号后边的值)

  • 在以后的开发中我们会经常用到可选型,其实系统提供的很多函数都有可选型,可以说可选型在swift中随处可见,这边只是介绍简单的可选型定义和解包,后续还会更新可选型其他的用处。
posted @ 2016-07-28 17:54  降妖除魔来深圳  阅读(153)  评论(0编辑  收藏  举报