Swift开发——元组

简介: Swift中的元组是一种数据结构,用于组合不同类型的值。它们不是独立的数据类型,而是以有序序列形式存在,用圆括号括起,元素间用逗号分隔。元组可以有任意数量和类型的元素,可变性取决于其定义。常用于函数返回多个值。示例代码展示了元组的创建、访问、解包及赋值。元组可以通过标签来标识元素,支持嵌套和比较。在函数返回值和并行赋值场景中,元组特别有用。

640.jpg


Swift语言的数据类型包括整型、浮点型、字符串、布尔型、数组、元组、集合和字典等,本文将详细介绍元组。
#01、元组



严格意义上,元组不属于数据类型,而属于数据结构。元组将一些变量或常量或字面量组织成一个有序的序列,索引号从0开始,用圆括号“()”括起来,各个元素间用“,”分隔。元组中可以有任意多个元素,各个元素可为任意类型;如果元组被定义为变量,则其各个位置的元素值可以改变(但各个位置的元素的数据类型保持不变)。

元组常被用作函数的返回值,借助元组可以从函数中返回多个值。

程序段1介绍了元组的基本用法。

image.png


在程序段1中,第3行“var price=5.6”定义变量price,赋初值为5.6,Swift语言自动识别price为Double型变量。

第4行“var tup1=("Apple",price,"Shangdao")”定义元组tup1,这里的元组为变量,其各个位置的元素值可以修改,但其各个位置的元素的数据类型保持不变,例如,第1个索引位置(从0开始索引)处只能为Double型数据。此外,元组不是数据类型,定义元组时,不用指定类型。

第5行“print(tup1)”在控制台上输出整个元组tup1,即输出“("Apple", 5.6, "Shangdao")”。

第6行“print(tup1.0)”在控制台上输出元组tup1的第0索引号对应的元素,即输出“Apple”。

第7行“tup1.1=8.9”将tup1元组的第1索引号位置的元素修改为8.9。元组中的元素可以借助“元组名.索引号”访问。

第8行“print(tup1)”输出元组tup1,得到“("Apple", 8.9, "Shangdao")”。

第9行“var tup2=(fruit:tup1,kind:"Fushi")”定义元组tup2。定义元组时可以为其每个元组指定“名称”或“标签”,并且元组可以嵌套,这里“fruit”为tup1的标签;“kind”为“Fushi”的标签。定义了元组中各个元素的标签后,可以借助“元组名.标签名”访问相应的元素。

第10行“print(tup2)”输出元组tup2,得到“(fruit:("Apple", 8.9, "Shangdao"), kind:"Fushi")”。

第11行“print(tup2.kind)”输出元组tup2的标签为kind的元素,得到“Fushi”。

第12行“tup2.kind="Guoguang"”由于元组tup2为变量,这里将tup2的kind标签的元素修改为“Guoguang”。

第13行“print(tup2.1)”输出元组tup2的第1索引号位置的元素,得到“Guoguang”。

第14行“let cord=(x:3.4,y:7.8,z:4.9)”定义cord元组,具有3个元素,它们的标签依次为x、y和z。这里的cord对应于空间中一个点的坐标,且这里元组cord为常量。

第15行“var (x,y, )=cord”称为元组的“解包”“拆包”或“分解”,而把一组变量、常量或字面量组合为一个元组,可称为元组的“打包”。这里x赋值为元组cord的标签x对应的元素;y赋值为cord的标签y对应的元素;“”为占位符,表示cord的标签z对应的元素被忽略。这里的变量x、y与cord元素中的同名标签互不影响。

第16行“print(x," ",y)”输出“3.47.8”,两个值间有3个空格。

第17行“print(cord.z)”输出cord元组的标签z对应的元素,得到“4.9”。

程序段1的执行结果如图1所示。

image.png


■ 图1 程序段1的执行结果

元组主要用作函数的返回值,可以返回多个值。此外,元组可以实现多个变量或常量的并行赋值。例如:

image.png


上述代码中,第2行“(x,y)=(y,x)”以两个元组的形式实现并行赋值,即交换x和y的值。

两个元组间可以比较大小,要求两个元组对应位置的元素类型相同,且对应位置的元素可以比较大小。元组按照其元素从左至右的方式依次比较相应位置上元素的大小,得到第一个较大元素值的元组大。若两个元组的全部对应位置上的元素都相等,则两个元组相等。

目录
相关文章
|
5天前
|
存储 Swift 索引
Swift开发——索引器扩展
扩展用于向已存在的类型(例如,类、结构体、枚举和协议等)中添加新的功能,扩展甚至可以向系统类型(包括无法查阅代码的类型)中添加新的功能,但是扩展不能覆盖原类型中已有的方法,扩展也不能向类中添加新的存储属性。
27 6
Swift开发——索引器扩展
|
5天前
|
存储 Swift
Swift开发——属性检查器
Swift中的属性检查器(willSet, didSet)允许在设置存储属性值前后执行代码。在类`Circle`中,属性`radius`使用属性观察器:willSet在赋值前检查值,若值为负则打印警告;didSet在赋值后比较新旧值,根据变化输出相应信息。在实例`c`中,`radius`从-5变为0时,输出“Input value is negative.”和“The circle gets smaller.”;从0变为10时,输出“Input value is normal.”和“The circle gets larger.”。
11 4
Swift开发——属性检查器
|
7天前
|
Swift C++ 索引
Swift开发——简单函数实例
函数是编程的基础,用于封装特定功能的代码。它们有关键词func、函数名、参数列表(可为空)和返回类型。多返回值可通过元组、数组、inout参数或可选类型实现。例如,返回元组 `(value1, value2)`,数组 `[value1, value2]` 或使用可选数组 `[[Double]]?`。函数可以作为其他函数的参数,类似闭包或Lambda表达式。在Swift中,示例展示了通过元组、带索引的元组、数组和可选类型返回多个值的函数。还演示了如何使用inout参数交换变量值。
22 5
Swift开发——简单函数实例
|
4天前
|
存储 Swift
Swift开发——弱占用
Swift的自动引用计数(ARC)管理类实例内存,通过强引用保持实例存活。当出现强引用循环时,可使用`weak`关键字创建弱引用,避免阻止实例释放。弱引用在不再被强引用时导致对象立即释放。示例中,添加`weak`至`author`和`book`变量防止引用循环,使得两者析构器均执行,释放内存。图2展示了弱引用结构,当解除所有强引用后,ARC自动释放实例,调用析构器。
11 1
Swift开发——弱占用
|
6天前
|
存储 程序员 Swift
Swift开发——存储属性与计算属性
Swift推荐使用结构体进行开发,结构体支持属性和方法,且作为值类型。结构体属性包括存储属性(如radius)和计算属性(如r),计算属性不存储值,类似方法。结构体用`struct`定义,命名遵循大驼峰规则。实例名遵循小驼峰规则。属性可在结构体中任意位置定义,静态属性用`static`。存储属性可为`lazy`实现懒加载。结构体实例通过`.`访问属性和方法,静态属性和方法用`结构体名.`访问。计算属性可读写,可通过`get`和`set`定义。程序段1展示了结构体Point和Circle的属性和方法,包括私有属性、只读计算属性、可读写计算属性及`mutating`方法。
8 0
Swift开发——存储属性与计算属性
|
8天前
|
存储 算法 Swift
Swift开发——循环执行方式
Swift语言中的循环主要包括`for-in`和`while`结构。`for-in`适用于遍历数字区间、字符串和字典,支持使用`stride`函数定制步进。字典遍历时,可以用二元元组`(k, v)`访问键值对。`while`循环有标准形式和`repeat-while`形式,确保至少执行一次循环体。程序示例展示了`for-in`和不同`while`结构的用法,包括计算阶乘、奇数和、加密字符串以及最大公约数和最小公倍数。
10 0
Swift开发——循环执行方式
|
9天前
|
安全 JavaScript Swift
Swift开发——输出格式化字符
这篇文章介绍了Swift语言的基本概念和格式化输出方法。Swift是苹果平台的官方编程语言,强调类型安全,使用`main.swift`作为程序入口。文章通过示例展示了如何使用`print`函数进行格式化字符串输出,包括控制整数和浮点数的宽度、对齐方式以及使用`String(format:)`函数。示例代码创建了一个名为Ch0001的工程,并展示了不同输出方式,如常规输出、格式化输出和使用`\(`常量名或变量名`)`的形式。最后,文章给出了程序的运行结果截图。
20 0
Swift开发——输出格式化字符
|
26天前
|
JavaScript 前端开发 Swift
开发语言漫谈-Swift
wift就是个语言的大杂烩
|
1月前
|
API 图形学 Swift
【Swift开发专栏】Swift与Core Graphics框架
【4月更文挑战第30天】本文介绍了Swift如何与Apple的Core Graphics框架结合,用于高性能的图形渲染和用户界面设计。Core Graphics提供底层绘图接口,包括图形上下文、路径、颜色空间、渐变和阴影等概念。在Swift中,开发者可直接调用Core Graphics函数,创建图形上下文、设置绘图属性、绘制图形和处理图像。文章还展示了如何实现渐变填充、阴影效果及自定义绘图代码,帮助开发者利用Swift创造复杂的图形和动画。通过掌握这些技能,开发者能为移动应用打造更具吸引力的视觉体验。
|
1月前
|
安全 Swift
【Swift开发专栏】Swift中的可选类型与解包
【4月更文挑战第30天】Swift的可选类型(Optional)用于表示变量可能无值,如用户未填写表单或空服务器数据。可选类型用问号(?)标记,状态可为包含值或nil。解包包括强制解包(!,可能触发运行时错误)、可选绑定(在if/while中安全解包)和隐式解包(声明时带!,使用时不需显式解包)。高级用法包括可选链式调用、空合并操作符(??)和可选类型比较。理解并恰当使用这些概念能提升代码的健壮性和安全性。