原文:Swift语言指南(八)--语言基础之元组

元组

元组(Tuples)将多个值组合为一个复合值。元组内的值可以是任何类型,各个元素不需要为相同类型(各个元素之间类型独立,互不干扰--Joe.Huang)。

下例中,(404, "Not Found") 是一个描述HTTP状态码的元组。HTTP状态码是当你向WEB服务器请求页面时服务器返回的一个特殊值,如果你(向WEB服务器)请求了一个不存在的网页,返回的状态码就是 404 Not Found :

 let http404Error = (, "Not Found")
// http404Error is of type (Int, String), and equals (404, "Not Found")
// http404错误的类型为(整型,字符串类型),它的值是(404,"Not Found")

(404, "Not Found") 元组将一个 Int 值与一个 String 值组合起来,表示 HTTP 状态码的两个值:一个数字和一个人们可读取的(文字性)描述。它可以这样理解:“一个类型为 (Int, String) 的元组”。

你可以将类型任意排列来创建元组,也可以随心所欲地让元组包含多种不同类型。只要你愿意,创建类型为 (Int, Int, Int) 或 (String, Bool) 的元组也不会有问题,当然,根据你的需要,其它排列方式也是可以的。

元组的内容可以分解(decompose)还原并赋值给单独的常量或变量,然后便可照常访问:

 let (statusCode, statusMessage) = http404Error
println("The status code is \(statusCode)")
// prints "The status code is 404" //输出“状态码为 404”
println("The status message is \(statusMessage)")
// prints "The status message is Not Found //输出"状态信息 Not Found"

如果你只需要元组的某一部分值,可以在分解元组时用下划线(_)标识来忽略掉其他部分:

 let (justTheStatusCode, _) = http404Error
println("The status code is \(justTheStatusCode)")
// prints "The status code is 404 //输出“状态码为 404”

或者,通过以 0 开头的元组索引访问元组的各个元素值:

 println("The status code is \(http404Error.0)")
// prints "The status code is 404" //输出“状态码为 404”
println("The status message is \(http404Error.1)")
// prints "The status message is Not Found //输出“状态码为 Not Found”
5 //这种方式类似于数组通过下标索引访问数组各个元素的值--Joe.Huang

还可以在定义元组时为元组的各个元素单独命名:

 let http200Status = (statusCode: , description: "OK")

为元组各元素命名后,便可以通过元素名称来访问各个元素的值了:

 println("The status code is \(http200Status.statusCode)")
// prints "The status code is 200" //输出“状态码为 404”
println("The status message is \(http200Status.description)")
// prints "The status message is OK //输出“状态信息 OK”

元组在作为函数返回值时非常有用。一个获取网页内容的函数可能会通过返回一个 (Int, String) 的元组类型来描述网页载入是成功还是失败。函数会返回两个类型完全不同的值来描述返回的状态或结果,(这种返回方式)所能提供的信息比只能返回固定类型的单个值要有用得多。详情请参见 多个返回值的函数(后面章节会译到)。

注:

元组对于多个关联值的临时组合是很有用的。但它们并不适用于创建复杂的数据结构,如果你的数据结构的生命周期超过临时使用的范畴(不是临时使用的值,就应该通过类或建模缓存起来--Joe.Huang),请将它作为类或结构建模,而不是以元组存储。详情请见 类与结构(后面章节会译到)。

谢谢,Swifter-QQ群:362232993,同好者进~

Fork:https://github.com/Joejo/Swift-lesson-for-chinese

Swift语言指南(八)--语言基础之元组的更多相关文章

  1. Swift语言指南(一)--语言基础之常量和变量

    原文:Swift语言指南(一)--语言基础之常量和变量 Swift 是开发 iOS 及 OS X 应用的一门新编程语言,然而,它的开发体验与 C 或 Objective-C 有很多相似之处. Swif ...

  2. Swift语言指南(七)--语言基础之布尔值和类型别名

    原文:Swift语言指南(七)--语言基础之布尔值和类型别名 布尔值 Swift有一个基本布尔类型,叫做布尔(bool),布尔值又称逻辑值(logical),因为它只能为真(true)或假(false ...

  3. Swift语言指南(二)--语言基础之注释和分号

    原文:Swift语言指南(二)--语言基础之注释和分号 注释 通过注释向自己的代码中注入不可执行的文本,作为你自己的笔记或提示.Swift编译器运行时会忽略注释. Swift的注释与C语言极其相似,单 ...

  4. Swift语言指南(三)--语言基础之整数和浮点数

    原文:Swift语言指南(三)--语言基础之整数和浮点数 整数 整数指没有小数的整数,如42,-23.整数可以是有符号的(正数,零,负数),也可以是无符号的(正数,零). Swift提供了8,16,3 ...

  5. Swift5 语言指南(八) 控制流

    Swift提供了各种控制流程语句.这些包括while多次执行任务的循环; if,guard和switch基于特定条件执行不同代码分支的语句; 和语句,如break和continue对执行流在你的代码转 ...

  6. Swift5 语言指南(八) 函数

    函数是执行特定任务的自包含代码块.您为函数指定了一个标识其功能的名称,此名称用于“调用”函数以在需要时执行其任务. Swift的统一函数语法足够灵活,可以表达从没有参数名称的简单C风格函数到具有每个参 ...

  7. Swift语言指南(九)--基本运算符

    原文:Swift语言指南(九)--基本运算符 运算符(operator)是用来检查,改变或合并值的一种特殊符号或短语.例如,加号运算符让两个数字相加(如:let i = 1 + 2),还有些更复杂的运 ...

  8. Swift语言指南(十)--字符串与字符

    原文:Swift语言指南(十)--字符串与字符 字符串是一段字符的有序集合,如"hellow,world"或"信天翁".Swift 中的字符串由 String ...

  9. Swift语言指南(四)--类型安全和类型推断

    原文:Swift语言指南(四)--类型安全和类型推断 Swift是一门类型安全语言,类型安全语言需要代码里值的类型非常明确.如果你的代码中有部分值需要String类型,你就不能错误地传递Int. 鉴于 ...

随机推荐

  1. Robotium调用getActivity()导致程序挂起的方法

    1. 问题背景的叙述性说明 需要直接用在工作中没有项目的源代码robotium测试目标android平台launcher,该平台的基础上,当前日期的版本号android 4.4.2.之前我用来验证的可 ...

  2. Android源代码学习之六——ActivityManager框架解析

    ActivityManager在操作系统中有关键的数据,本文利用操作系统源代码,逐步理清ActivityManager的框架,并从静态类结构图和动态序列图两个角度分别进行剖析,从而帮助开发者加强对系统 ...

  3. IP多播(组播)

    IP多播是实现数据一对多通信的模式.从一个源点传送到多个目的地,数据仅仅拷贝一份.这里说的数据仅仅拷贝一份,是指在每一条须要它的两个点之间,数据仅仅有一份.例如以下图为<计算机网络>(谢希 ...

  4. Snail—ORACLE基础之事务学习(五)

    ---------------事务---当运行到commit时 事务才算是完毕,不然 会运行rollback操作. declare v_money acount.money%type:=1223; e ...

  5. 复制(6)——分发者(Distributor)

    如简介中提到,分发者(Distributor)是SQLServer 复制过程的核心组件.因为它是控制和执行实际的数据移动的过程,并且存放了发布(Publications)和订阅(Subscriptio ...

  6. jedis异常:NoSuchElementException: Timeout waiting for idle object

    项目发现网络环境:java.util.NoSuchElementException: Timeout waiting for idle object 问题原因:不应该在try中释放资源.而应该在fin ...

  7. WPF学习(5)依赖属性

    今天我们来学习WPF一个比较重要的概念:依赖属性.这里推荐大家看看周永恒大哥的文章,讲的确实很不错.我理解的没那么深入,只能发表一下自己的浅见.提到依赖属性,不得不说我们经常使用的传统的.net属性, ...

  8. android可扩展自己的定义,运动图像裁剪框

    在实际项目中,常常要制作一个简易的图像裁剪功能,即获取一张图片.并用一个遮罩层选择目标范围并截取保存的功能.例如以下图所看到的: 在此分享下该自己定义视图的制作过程. 需求说明 整一个视图包括一个透明 ...

  9. SQL开发中容易忽视的一些小地方(六)

    原文:SQL开发中容易忽视的一些小地方(六) 本文主旨:条件列上的索引对数据库delete操作的影响. 事由:今天在博客园北京俱乐部MSN群中和网友讨论了关于索引对delete的影响问题,事后感觉非常 ...

  10. oracle的分页查询碰到的一个小问题

    订单表.与订单信息表(多个订单信息列有同一个订单id) 查出全部订单以及其信息并依照订单分页 select * from( select a. * , (DENSE_RANK() OVER(ORDER ...