最近看 iOS 的官方功能的 Demo 时,发现代码中使用元组的地方很多,所以兴趣上来,查了下元组的出处。

在苹果的文档中就只有简短的两句,使用元组创建一个组合的值,从函数中返回多个值。元组中的可以使用属性值或者索引引用

Apple Documentation

Use a tuple to make a compound value, to return multiple values from a function. The elements of a tuple can be referred to either by name or by number.

语句越是简短,传达的信息越是多啊,在查找其他大佬对元组的介绍时,比较认同其中一个大佬的理解:把元组看作是微型 Struct 或者 Struct List,应该在最小的范围内使用,然后被释放。也就是元组是值传递,而不是引用。

元组包括 StringIntegerBool,甚至是元组类型都可以:

// 创建元组
let foo = (0, false, 'Hello')

也可以在创建元组时,定义值类型:

let foo: (Int, Bool, String) = (0, false, 'Hello')

在使用的时候可以通过索引获取:

print(foo.0) // print: "0"
print(foo.1) // print: "false"
print(foo.2) // print: "Hello"

也可以通过属性值去获取值:

// 创建元组
let person = (age: 20, isTall: false, name: "tam") print(person.age) // print: "20"
print(person.isTall) // print: "false"
print(person.name) // print: "tam"

哪里可以使用元组?

当函数需要返回多个不同类型的值时,是使用元组最好的时候。可以使用 typealias 去定义一个元组类型,并给到函数处理,比如下面代码:

typealias Person = (age: Int, isTall: Bool, name: String)

func getMultipleValues() -> Person {

  	let person: Person = (age: 20, isTall: false, name: "tam")
return person
} let person = getMultipleValues() print(person.age) // print: "20"
print(person.isTall) // print: "false"
print(person.name) // print: "tam"

发现

如果使用 Swift 开发时,也在不知不觉中接触到元组,先看下面三个函数:

func functionA() -> Void { }

func functionB() -> () { }

func functionC() { }

functionA() 是创建函数的标准样式,functionB 的返回值是元组 ()functionC() 通过完全省略返回类型。

由此可推断,typealias Void = (),实际上就是一个空的元组。所以,元组也可以是空的

题外话

时间仓促,说的东西可能不全面,在你实现过程中遇到什么问题,评论区给我留言,我会尽快回复

Swift-技巧(三)使用元组(tuple)的更多相关文章

  1. [Python]字典Dictionary、列表List、元组Tuple差异化理解

    概述:Python中这三种形式的定义相近,易于混淆,应注意区分. aDict={'a':1, 'b':2, 'c':3, 'd':4, 'e':5} aList=[1,2,3,4,5] aTuple= ...

  2. 第三天:字典表dict、元组tuple、文件与类型汇总

    1.字典表dict 声明 {键: 值,...} dict(键=值) d = {'isbn':'13123','title':'python入门'} #字典表中的键不能使用诸如列表这种可以改变的,只能使 ...

  3. c# 元组Tuple

    Tuple类型像一个口袋,在出门前可以把所需的任何东西一股脑地放在里面.您可以将钥匙.驾驶证.便笺簿和钢笔放在口袋里,您的口袋是存放各种东西的收集箱.C# 4.0引入的一个新特性 Tuple类型与口袋 ...

  4. Java元组Tuple使用实例--转载

    原文地址:http://50vip.com/35.html 一.为什么使用元组tuple? 元组和列表list一样,都可能用于数据存储,包含多个数据:但是和列表不同的是:列表只能存储相同的数据类型,而 ...

  5. python基础2--数据结构(列表List、元组Tuple、字典Dict)

    1.Print函数中文编码问题 print中的编码:# -*- coding: utf-8 -*- 注:此处的#代表的是配置信息 print中的换行符,与C语言相同,为"\n" 2 ...

  6. 人生苦短之我用Python篇(列表list、字典dict、元组tuple、字符串str)

    列表 创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_s ...

  7. 元组Tuple、数组Array、映射Map

    一.元组Tuple 元组Tuple是不同类型的值的聚集,元组的值将单个的值包含在圆括号中来构成,元组可以包含一个不同类型的元素 如 val riple = (100, "Scala" ...

  8. python-day3 元组(tuple),列表(list),字典(dict)

    1.元组 tuple 有序数据,元组数据不可更改,若元组中有列表,可更改元组中的列表值里的值 元组中以","分开,若只有一个值就不是元组 包含各种数据类型 索引取值:t(2,0.0 ...

  9. Python元组tuple(不可变)

    Python元组Tuple(不可变): 元组的特点: 1.元组的初始化: tuple = (1, )  #元组只有一个元素的话,初始化时要加,否则当做元素的普通变量类型处理 tuple = (1, 2 ...

  10. python 元组tuple - python基础入门(14)

    在上一篇文章中我们讲解了关于python列表List的相关内容,今天给大家解释一下列表List的兄弟 – 元组,俗称: tuple. 元组tuple和列表List类似,元组有如下特点: 1.由一个或者 ...

随机推荐

  1. PHP垃圾回收机制的一些浅薄理解

    相信只要入门学习过一点开发的同学都知道,不管任何编程语言,一个变量都会保存在内存中.其实,我们这些开发者就是在来回不停地操纵内存,相应地,我们如果一直增加新的变量,内存就会一直增加,如果没有一个好的机 ...

  2. composer 下载包慢

    方法一: 修改 composer 的全局配置文件(推荐方式) 打开命令行窗口(windows用户)或控制台(Linux.Mac 用户)并执行如下命令: composer config -g repo. ...

  3. vue报错 Uncaught TypeError: Cannot read property of null

    有可能是点击a标签,但是a标签有click事件,未阻止默认事件导致报错,开始都看不出来是什么错误

  4. php获取纳秒方法

    PHP不提供精度高于微秒的函数. 可以使用system功能,直接从机器中获得的价值,如果你运行的是Linux: $nanotime = system('date +%s%N');

  5. JDK1.8源码(四)——java.util.Arrays类

    一.概述 1.介绍 Arrays 类是 JDK1.2 提供的一个工具类,提供处理数组的各种方法,基本上都是静态方法,能直接通过类名Arrays调用. 二.类源码 1.asList()方法 将一个泛型数 ...

  6. contos 7修改root密码

    https://www.linuxidc.com/Linux/2018-01/150211.htm 下面是CentOS 7的root密码修改 开机按esc 选择CentOS Linux (3.10.0 ...

  7. abp 以或的方式验证多个 AuthorizeAttribute

    前言 在使用 abp 开发业务功能时,会遇到公用同一个类的情况,在给这个类配置权限时,就要添加多个 AuthorizeAttribute,类似下面这样: [Authorize(DcsPermissio ...

  8. P6657-[模板]LGV 引理

    正题 题目链接:https://www.luogu.com.cn/problem/P6657 题目大意 给出$n\times n$的棋盘,$m$个起点第$i$个为$(1,a_i)$,对应$m$个终点第 ...

  9. P7099-[yLOI2020]灼【数学期望,结论】

    正题 题目链接:https://www.luogu.com.cn/problem/P7099 题目大意 给出\(n\)个坐标轴上的点,\(q\)次询问从某点出发每次等概率向左或者向右一格求到达某个给出 ...

  10. P4542-[ZJOI2011]营救皮卡丘【费用流,Floyd】

    正题 题目链接:https://www.luogu.com.cn/problem/P4542 题目大意 给出\(n+1\)个点\(m\)条边的无向图,\(k\)个人开始在\(0\)号点,一个人进入\( ...