Swift | 什么是元组

元组(Tuple)可能是你从ObjC迁移到Swift时,遇到的第一个没有“原型”的概念,由于使用元组时,有一系列在ObjC看来匪夷所思的语句出现,让我们先来看看元组的样子长什么样:

声明

var aTuple = (10, "Xishi")

最简单的元组,就是在圆括号中,用逗号分割的一组值。
元素带名称的元组:

var aTuple = (index: 10, name: "Xishi")

元组有以下特点:

  • 一旦声明,可以改值,但不能添加/删除元素
  • 不能更改已经声明的元素名称
  • 已声明的名称可以省略,但未声明名称的元组,不可添加名称:
var aTuple = (10, "Xishi") // 未声明名称
aTuple = (10, name:"Xishi") // 后期添加名称,可行但无效
aTuple.name // 错误

取值

要取用元组中的值,针对声明时是否有元素名称,有两种取值方法,
通用方法,使用下标:

aTuple.0 // == 10
aTuple.1 // == "Xishi"

已命名的元组,可使用名称:

aTuple.index
aTuple.name

还可以直接分拆成常量/变量:

let (x, y) = aTuple
x // == 10
y // == "Xishi"
var (a, b) = aTuple
a // == 10
b // == "Xishi"

取值时可以指定类型,加强类型判断:

let (x, y): (Int, Int) = (1, 2) //正确
let (x, y): (Int, Int) = aTuple //错误,因为第二个值声明为String,与Int不相符

不想处理的值,可以用下划线_代替(大概是设计者体恤我们想变量名的痛苦吧):

let (x, _) = aTuple

应用

作为函数参数

func foo(_ args: (Int, Int, String)) -> Int {
    return args.0
}

let arguments = (4, 3, "hello")
foo(arguments) // 返回 4

作为函数返回值

利用元组,从函数中返回多个值:

func abc() -> (Int, Int, String) {
    return (3, 5, "Xishi")
}

let (a, b, c) = abc()

通过以上介绍,你对元组应该有些概念了,由于相对ObjC来说,元组比较陌生,本文刻意避免提到结构体、数组、字典、枚举等常见组合类型,希望你能先忘记这些熟悉的概念,仔细体会文中提到的使用方法,避免在开发时陷入不必要的误区中。

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 1,485评论 0 8
  • 参考资源《swifter》https://github.com/iOS-Swift-Developers/Swif...
    柯浩然阅读 682评论 0 6
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 6,999评论 1 22
  • 亲子日记第269篇,2018年7月17日,星期二,天气晴。 今天是入伏的第一天,天气仍然湿热难耐。 孩子放假已经快...
    海内存知己_bd9e阅读 31评论 0 0
  • 浑浑噩噩的大学生活即将接近尾声。同学们该告白的告白,该分手的分手。一个个青春地里满是花开花谢,好不繁华萧疏。而我站...
    七佛阅读 252评论 3 3