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

  今天的博客中就总结一下关于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,如下所示。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

第十三天 面向对象-final static 匿名对象内部类包代码块【悟空教程】

1394
来自专栏Python小屋

小议Python列表和元组中的元素地址连续性

众所周知,在Python中字典和集合依赖元素哈希表来存储,并不存在传统意义上的所谓元素“顺序”,当然,如果需要一个有序的字典可以使用collections模块提...

35210
来自专栏Esofar 开发日记

JavaScript权威指南 - 对象

JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删。 JavaScript中的所有事物都是对象:字符串、数字、数组、日期,等等...

822
来自专栏IT可乐

Java关键字(四)——final

  对于Java中的 final 关键字,我们首先可以从字面意思上去理解,百度翻译显示如下:

863
来自专栏编程坑太多

js的坑,你遇到过几个

1715
来自专栏二进制文集

30分钟玩转「正则表达式」

推荐阅读:Jeffrey Friedl 《精通正则表达式(第3版)》,本文是该书的读书笔记。

1002
来自专栏Java 源码分析

Java面向对象基础

     面向对象一直是一种很流行的思想,他的精髓也就在于他的三大特性:封装,继承和多态。本文就在这三个方面简单的谈一谈Java的面向对象基础。 1.封装:  ...

3395
来自专栏编程

python中的变量

变量与数据类型 变量 编程语言中为了能够更好的处理数据,都需要使用一些变量。Python 语言的变量可以是各种不同的数据类型,使用变量的时候不需要声明直接使用就...

2030
来自专栏吴伟祥

(待整理完)正则表达式30分钟入门教程

Regular Expression(regex、regexp或RE):记录文本规则的代码

1053
来自专栏阿炬.NET

Reflector、reflexil、De4Dot、IL指令速查表

3415

扫码关注云+社区