转载

窥探Swift之新添数据类型元组与可选值

今天的博客中就总结一下关于Swift中相对Objc新添加的两个数据类型:元组(Tuple)和可选值类型(Optional)。上面这两个类型是Swift独有的类型,使用起来也是非常方便的,今天就通过一些示例来介绍一下如何初始化和使用元组和可选值类型以及使用元组和可选值类型的场景。废话少说,直奔主题,在今天的示例代码中仍然是使用Playground来测试的。左边是代码,右边是Playground中的结果。

一、Swift中的元组(Tuple)

元组类似于C语言中的结构体(Struct),用来存储一组相关的值,并且允许这些相关值的类型不同。元组一般在数组返回多个值的时候使用。

1. 直接定义元组,不指定元组中元素的类型。定义元组的语法是直接使用一对小括号,括号中是由逗号分开的各个值。具体如下所示:

窥探Swift之新添数据类型元组与可选值

2.取出元组中的值,方式一:直接赋值给相应的常量(或者变量),下面这行代码就是直接把元组赋值给常量,在Swift中字符串之间的连接可以使用+号运算符。经过下面的语句就会把元组的值一次赋值给我们定义的常量。一句话概括:"一个萝卜一个坑,对号入座"。

窥探Swift之新添数据类型元组与可选值

3.还可以通过元组的下标索引来获取元素的值,元组的下标是从零开始的,下面是通过元组的下标来获取元组的元素值的。

窥探Swift之新添数据类型元组与可选值

4.我们还可以显式的指定元组的每个元素的类型,下面就为元组student1每个元素指定了数据类型,前两个是字符串类型,后两个是整型。如果你尝试着给字符串类型的元素赋值整型数据,则编译器会报错,同时会提示元组每个元素指定的数据类型。

窥探Swift之新添数据类型元组与可选值

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

窥探Swift之新添数据类型元组与可选值

二、Swift中可选类型(Optional)

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

1.可选值类型是可以直接赋值nil,为了类型安全而普通的变量和常量是不可以直接赋值nil的如下所示:

窥探Swift之新添数据类型元组与可选值

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

窥探Swift之新添数据类型元组与可选值

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

下面optionalValue是可选类型的变量,并且把“ludashi”赋值给它,如果不使用!强制打开optionalValue的值的话,编译会抛红报错。

窥探Swift之新添数据类型元组与可选值

4.来看一下可选类型的使用场景以及使用小实例。

(1)把字符串转换成整数时我们要用可选类型的变量(或者常量)来接受,因为我们不确定是否转换成功了,然后经过非空判断后,再使用感叹号(!)强制打开进行使用。

下面把一个数字字符串转换成整数,然后使用一个变量去接收,然后去判断这个变量是否为空,不为空就强制打开进行使用,下图转换后不为nil就会被强制打开然后使用。

窥探Swift之新添数据类型元组与可选值

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

窥探Swift之新添数据类型元组与可选值

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

窥探Swift之新添数据类型元组与可选值

如果numberInteger为nil的话, 就不会调用isEmpty, resultEmpty就会被赋值成nil,如下所示。

窥探Swift之新添数据类型元组与可选值

关于元组和可选类型的使用还得在项目中结合具体的应用场景来使其发挥更大的作用,本篇博客就先通过一些小的实例来看一下元组和可选类型的使用方法和使用场景,举一反三才是最重要的。今天的博客就到这吧。

正文到此结束
Loading...