今天的博客中就总结一下关于Swift中相对Objc新添加的两个数据类型:元组(Tuple)和可选值类型(Optional)。上面这两个类型是Swift独有的类型,使用起来也是非常方便的,今天就通过一些示例来介绍一下如何初始化和使用元组和可选值类型以及使用元组和可选值类型的场景。废话少说,直奔主题,在今天的示例代码中仍然是使用Playground来测试的。左边是代码,右边是Playground中的结果。
一、Swift中的元组(Tuple)
元组类似于C语言中的结构体(Struct),用来存储一组相关的值,并且允许这些相关值的类型不同。元组一般在数组返回多个值的时候使用。
1. 直接定义元组,不指定元组中元素的类型。定义元组的语法是直接使用一对小括号,括号中是由逗号分开的各个值。具体如下所示:
![]()
2.取出元组中的值,方式一:直接赋值给相应的常量(或者变量),下面这行代码就是直接把元组赋值给常量,在Swift中字符串之间的连接可以使用+号运算符。经过下面的语句就会把元组的值一次赋值给我们定义的常量。一句话概括:"一个萝卜一个坑,对号入座"。

3.还可以通过元组的下标索引来获取元素的值,元组的下标是从零开始的,下面是通过元组的下标来获取元组的元素值的。
![]()
4.我们还可以显式的指定元组的每个元素的类型,下面就为元组student1每个元素指定了数据类型,前两个是字符串类型,后两个是整型。如果你尝试着给字符串类型的元素赋值整型数据,则编译器会报错,同时会提示元组每个元素指定的数据类型。

5.给元组的每个元素赋上正确的值,就会在Playground上显示出每个元素应有的值。

二、Swift中可选类型(Optional)
可选类型是Swift中新的类型,可选类型使得Swift的数据类型更为安全,可选类型可以说在Swift中扮演着重要的角色,它使得你的代码更为健壮,下面将会给出可选类型的使用场景。可选值,用大白话解释就是不确定这个变量或者常量中是否有值(有可能为nil),所以这个变量或常量的值是可选的。下面对optional进行详细介绍。
1.可选值类型是可以直接赋值nil,为了类型安全而普通的变量和常量是不可以直接赋值nil的如下所示:

2. 定义可选值类型的语法是在类型声明后添加一个?号,说明这个变量的值是不确定的,所以喽就添加了一个?号。下面就是给可选值类型赋一个nil, 是不会报错的。

3.给可选类型变量赋一个值后,如果要使用这个可选变量的值,需要使用感叹号(!)强制打开,如果不使用感叹号(!)强制打开,编译器会报错。为什么要用感叹号强制打开可选变量的值呢? 原因很简单,因为可选类型的值有可能为nil, 使用感叹号(!)强制打开的原因是告诉编译器"这个可选变量的值不为空,我要使用它”,强制打开后,在使用可选变量的值时,编译器就不会报错了。
下面optionalValue是可选类型的变量,并且把“ludashi”赋值给它,如果不使用!强制打开optionalValue的值的话,编译会抛红报错。

4.来看一下可选类型的使用场景以及使用小实例。
(1)把字符串转换成整数时我们要用可选类型的变量(或者常量)来接受,因为我们不确定是否转换成功了,然后经过非空判断后,再使用感叹号(!)强制打开进行使用。
下面把一个数字字符串转换成整数,然后使用一个变量去接收,然后去判断这个变量是否为空,不为空就强制打开进行使用,下图转换后不为nil就会被强制打开然后使用。

下面是转换后为nil的情况, 就不会做处理,因为判断为nil, 所以就不做处理。

(2)当你使用某个类的某个方法时,你不确定该类是否有这个方法,可以使用?来打开该可选值,然后再调用该类的方法。?号就是告诉编译器你不知道该类是否有该调用的方法,如果有就调用,如果没有就忽略。如下实例所示:

如果numberInteger为nil的话, 就不会调用isEmpty, resultEmpty就会被赋值成nil,如下所示。
![]()
关于元组和可选类型的使用还得在项目中结合具体的应用场景来使其发挥更大的作用,本篇博客就先通过一些小的实例来看一下元组和可选类型的使用方法和使用场景,举一反三才是最重要的。今天的博客就到这吧。
总浏览量
4,185次
博客园历史 1,063 腾讯云 1,422 阿里云 1,699 本站新增 1
本站阅读按浏览器在 15 分钟内去重;禁用浏览器存储时按网络地址去重。推荐按浏览器一年内去重。仅使用站内随机标识,不采集浏览器指纹。
分享这篇文章
原创内容,未经授权禁止转载。
欢迎分享原文链接。除另有署名或许可说明外,本站原创文章的著作权由青玉伏案享有;未经书面授权,禁止整篇转载、复制发布、改编传播或建立内容镜像。
版权与使用条款
- 依法属于合理使用、法定许可等情形的,按法律规定执行;引用时应注明作者、作品名称和原文链接,不得歪曲、篡改或隐去署名。
- 经书面授权使用的,请遵守约定的用途、范围与署名要求。注明出处不等同于已经取得整篇转载或其他使用授权。
- 第三方图片、引用内容和书籍封面等权利归相应权利人所有;开源代码与 Demo 按其各自许可证使用,本声明不改变已有许可。
- 本声明参考《中华人民共和国著作权法》第十条、第二十四条、第五十二条等。对侵权使用,权利人保留依法要求停止侵害并追究相应责任的权利。

讨论