原文: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. AndroidUI的组成部分ProgressBar

    package com.gc.progressbar; /* * 1.ProgressBar组件也是一组重要的组件,ProgressBar本身代表了进度条组件, * 它还派生了两个经常使用的组件:Se ...

  2. Webuploader 大文件分片上传

    百度Webuploader 大文件分片上传(.net接收)   前阵子要做个大文件上传的功能,找来找去发现Webuploader还不错,关于她的介绍我就不再赘述. 动手前,在园子里找到了一篇不错的分片 ...

  3. C#启动进程之Process

    在程序设计中,我们经常会遇到要从当前的程序跳到另一个程序的设计需求.也就是当前进程创建另一个进程.C#提供了Process使得我们很方便的实现. 1.Process基本属性和方法 Id //进程的Id ...

  4. 日积月累:weightSum和layout_weight属性合用

    解说一:weightSum和layout_weight属性合用 android:weightSum属性:定义weight总和的最大值. 假设为指定该值,全部子视图的layout_weight属性的累加 ...

  5. WEB功能测试说明

    站点功能測试就是对产品的各功能进行验证.依据功能測试用例,逐项測试.检查产品是否达到用户 要求的功能.经常使用的測试方法例如以下: 1.页面链接检查: 每个链接是否都有相应的页面.而且页面之间切换工具 ...

  6. codeforces 236A . Boy or Girl(串水问题)

    A. Boy or Girl 点击打开题目 time limit per test 1 second memory limit per test 256 megabytes input standar ...

  7. rm-rf 恢复过程中滥用

    多DBA一定rm -rf讨厌它,也许有一天自己将数据库,以消除一个中午,然后.那么就没有一个--这种情况下,--这个不幸真的发生,你真的无药可救?不必要,有解决方法.也许你遇到不幸时,有一天.你可以用 ...

  8. springMVC+angular+bootstrap+mysql的简易购物网站搭建

    springMVC+angular+bootstrap+mysql的简易购物网站搭建 介绍 前端的css框架用了bootstrap, 以及bootstrap的JS组件, 以及很好用的angular(a ...

  9. PowerDesigner教程

    PowerDesigner是一款功能很强大的建模工具软件,足以与Rose比肩,相同是当今最著名的建模软件之中的一个.Rose是专攻UML对象模型的建模工具,之后才向数据库建模发展,而PowerDesi ...

  10. oracle 数据库安装环境,需要大汇总

     Oracle Database (RDBMS) on Unix AIX,HP-UX,Linux,Mac OS X,Solaris,Tru64 Unix Operating Systems Ins ...