美文网首页
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-可选类型

    可选类型 上一节我们介绍了数据类型,其中有个类型叫做可选类型,这节我们专门讨论一下。 什么叫可选类型? 《老子》有...

  • Swift5-外行零基础入门_02-数据类型

    数据类型 什么是数据类型? 我们知道,虽然我们在屏幕上看到的有文字,图片,视频等各种形式,但是在计算机中,都是以0...

  • Swift5-外行零基础入门_04-基础概念

    基础概念 我们之前讲的数据类型也是基础,是基础中的基础。这节,我们介绍另外一些编程语言中众所周知的一些基础概念,比...

  • Swift5-外行零基础入门_13-枚举

    枚举 什么是枚举? 还是说回到数据类型。我们在表达某个事物的时候,可以用数字,文字进行描述;可以用流程语句来描述一...

  • Swift5-外行零基础入门_6-字符

    字符和字符串 本节,我们专门来讲讲数据类型中的String类型及其操作。 什么是字符和字符串? 简单理解,字符就是...

  • Swift5-外行零基础入门_15-结语

    在Swift的官方文档中,后面还有很多概念,比如什么泛型,协议,析构,扩展,错误处理等等。但是,对于零基础的外行来...

  • Swift5-外行零基础入门_01-开篇

    开篇 为什么写这篇教程? 我正经的职业其实是建筑设计师,专业是建筑学,但是对编程一直保有兴趣。自认掌握最深的就算是...

  • Swift5-外行零基础入门_8-集合(下)

    集合的操作 这节,我们主要介绍如何操作这些数据组合。操作任何数据,可以简单提炼为 增,删,改,查四个字。关于查,就...

  • Swift5-外行零基础入门_9-控制流

    控制流 什么是控制流? 所谓控制流,是用来控制一件事物的流程的。跟数据类型一样,同样是模拟我们大脑对现实生活的处理...

  • Swift5-外行零基础入门_7-集合(上)

    集合 什么是集合? 我们之前介绍了数据类型,每个数据类型中往往包含是单条数据。其实,多条数据也可以组合的形式出现。...

网友评论

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

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