美文网首页
Swift5-外行零基础入门_03-可选类型

Swift5-外行零基础入门_03-可选类型

作者: DavidShawn | 来源:发表于2020-12-18 19:22 被阅读0次

    可选类型

    上一节我们介绍了数据类型,其中有个类型叫做可选类型,这节我们专门讨论一下。

    什么叫可选类型?

    《老子》有云:“天下万物生于有,有生于无”,也就是说,本来什么都没有,然后就有某个物了,再然后万物就出现了。这段描述,放在计算机程序中特别合适。
    某个变量,可以是空无的状态,用nil表示;也可以是IntstringDouble等。

    哪些情况会出现可选类型?

    比如,我们将一个String类型强制转换为Int类型时

    var a = Int("Hello")
    print(type(of: a))    //"Optional<Int>\n"
    print(a)                   //"nil\n"
    // 打印的结果是,a是一个Optional<Int>类型,就是说a要么是Int型,要么就是nil
    // 在这里,a没有转换成功,所以a的值是nil
    

    再看这个例子

    var b = Int("123")
    print(type(of: b))  //"Optional<Int>\n"
    print(b)                //"Optional<123>\n"
    // b同样是个Optional<Int>类型
    // 直接print(b)实际上是一种隐式解析
    

    注意:nil不会单独出现,它只出现在可选类型中
    var a = nil 是错误的,nil只能用于可选值。

    如何使用可选类型?

    声明一个变量时,在类型后面加?,就得到一个该类型的可选类型。比如
    var a: String? = nil
    var b: String? = "Hello"
    我们定义了a,b两个String可选变量,就是说,a,b要么有string类型的值,要么是空值。
    这里,我们给a同时赋予了nil的空值,b则赋予了"Hello"的值。

    那么,我们如何调用这两个可选值呢?
    如果我们直接调用变量,比如print(a),Xcode会有黄色提示Expression implicitly coerced from 'Int?' to 'Any',这是因为,a是可选类型,状态不稳定,计算机拒绝接收这种未知状态,咱毕竟还不是量子计算机。因此,我们要采取某种措施,让可选类型塌缩。

      1. 强制解析
        在可选类型的变量后面加!,强制解析变量中的非空值。
        print(a!),这样会出错,因为a是空值,解析不到非空值,就报错了。
        print(b!),这样没问题,因为b有非空值"Hello"。
        因此,如果你确定你使用的变量有非空值时,可以采用这种强制解析方式,但是大部分情况下是危险的。
      1. 先判断,再解析
        借用if语句,判断变量是不是非空值,如果是非空值,再强制解析。
      if a != nil {
          print(a!)
      }
      // a 不等于 nil,这个条件不成立,因此这句代码没有执行
      if b != nil {
          print(b!)
      }
      // Hello
      // b 不等于 nil,这个条件成立,因此强制解析b,并打印出来
      
      1. 可选绑定
      if let v1 = a {
          print(v1)
      }
      // a赋值给常量v1,作为判断条件,赋值不成功,该语句不执行。
      if let v2 = b {
          print(v2)
      }
      // b赋值给常量v2,赋值成功,语句执行
      

    还有几种解析形式,比如使用三元运算符空合运算符等,逻辑大体相似,这里就不再赘述了。

    小结与预告

    数据类型已经讲完了,下节,我们再继续掌握一些必须的相关知识点。

    相关文章

      网友评论

          本文标题:Swift5-外行零基础入门_03-可选类型

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