Swift学习笔记之元组(tuples)

发布时间 - 2026-01-11 01:12:46    点击率:

元组

元组(tuples)是由其它类型组合而成的类型。元组可能包含零或多个类型,比如 字符串、整数、字符、布尔以及其它元组。同时请注意,元组是值传递,而不是引用。

在Swift中创建元组的方式很简单,元组类型是用括号包围,由一个逗号分隔的零个或多个类型的列表。例如:

let firstHighScore = ("Mary", 9001)

另外,在创建元组时你还可以给元组中的元素命名:

let secondHighScore = (name: "James", score: 4096)

以上就是创建元组的两种方式,非常简单和简洁。你不需要像创建struct一样写出它的结构和内部属性,也不需要像创建class一样要写初始化方法。你只需要把你想用的、任何类型的值放在圆括号内,用逗号隔开即可。如果你愿意你还可以给每个元素命名,提高元组使用效率。

从元组中读元素

如果我们没有给元组的元素命名,我们可以用点语法,通过定义好的元组变量或常量获取它的第1个到第n个元素:

let firstHighScore = ("Mary", 9001)
println(firstHighScore.0) // Mary
println(firstHighScore.1) // 9001

如果你觉得上述这种方法会造成语义的不明确,那么我们还可以将元组赋值给一个带有元素名称的元组(元素名称个数要对应):

let (firstName, firstScore) = firstHighScore
println(firstName) // Mary
println(firstScore) // 9001

如果你只需要一部分元组值,分解的时候可以把要忽略的部分用下划线(_)标记:

let (_, firstScore) = firstHighScore
println(firstScore) // 9001

如果我们已经给元组中的元素命名了名称,那么我们可以这样写:

let secondHighScore = (name: "James", score: 4096)
println(secondHighScore.name) // James
println(secondHighScore.score) // 4096

将元组作为函数返回值

当你想让一个函数能够返回多种类型时,这是元组的最佳使用场景。

我们可以将元组作为函数的返回值,下面这个函数的返回值就是我们之前定义过的secondHighScore元组:

func getAHighScore() -> (name: String, score: Int) {
 let theName = "Patricia"
 let theScore = 3894
 return (theName, theScore)
}

为什么说上述函数的返回值是secondHighScore元组呢?因为getAHighScore函数返回的元组元素个数、元素名称、元素类型均和secondHighScore相同。

其实将元组作为函数的返回值时也可以不必对元素进行命名,只要你明白每个元素代表的含义即可:

func getAHighScore() -> (String, Int) {
 let theName = "Patricia"
 let theScore = 3894
 return (theName, theScore)
}

如果你不确定返回的元组一定不为nil,那么你可以返回一个可选的元组类型:

func maybeGetHighScore() -> (String, Int)? {
 return nil
}

因为是可选的元组类型,所以当返回的元组不为nil时,你需要对元组进行解包:

if let possibleScore = maybeGetHighScore() {
 possibleScore.0
 possibleScore.1
} else {
 println("Nothing Here")
}

注意:当你定义了一个没有返回值的函数时,其实该函数是返回一个空的元组()。

元组的访问级别

元组的访问级别取决于它包含的元素。比如元组里的元素都是private级别的,那么该元组也是private级别的。但这里有一个遵循最小的原则,也就是说如果一个元组中有两个元素,一个为private级别,另一个为public级别,那么该元组遵循最小原则,它的访问级别为private。

元组是值类型

关于值类型和引用类型的知识这里不再累赘,我们通过一个代码示例来看看元组是哪种类型:

var someScore = ("John", 55)
var anotherScore = someScore
anotherScore.0 = "Robert"
println(anotherScore.0) //Outputs: "Robert"
println(someScore.0)  //Outputs: "John"

通过上述的代码示例可以看出,我把someScore元组赋值给了anotherScore,然后修改了anotherScore的第1个元素的值,最后分别打印了someScore和anotherScore第1个元素的值。someScore元组第一个元素的值为Robert,而anotherScore元组第一个元素的值仍然为John。由此可见元组是值类型。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# swift  # 元组  # 元组定义  # swift3.0  # Swift中switch语句区间和元组模式匹配  # IOS 开发之Swift 元组的实例详解  # 返回值  # 组中  # 第一个  # 多个  # 当你  # 你还  # 我们可以  # 可选  # 不为  # 不需  # 要像  # 都是  # 你只需要  # 这是  # 如果你  # 放在  # 还可以  # 你可以  # 是由  # 两种 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现全文搜索功能?(Scout和Algolia示例)  高端云建站费用究竟需要多少预算?  Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  js实现获取鼠标当前的位置  实例解析angularjs的filter过滤器  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  Laravel怎么上传文件_Laravel图片上传及存储配置  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  如何基于PHP生成高效IDC网络公司建站源码?  🚀拖拽式CMS建站能否实现高效与个性化并存?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  如何在建站之星网店版论坛获取技术支持?  如何用西部建站助手快速创建专业网站?  JavaScript实现Fly Bird小游戏  如何在Windows环境下新建FTP站点并设置权限?  Java解压缩zip - 解压缩多个文件或文件夹实例  Python数据仓库与ETL构建实战_Airflow调度流程详解  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  如何在阿里云完成域名注册与建站?  如何在阿里云虚拟服务器快速搭建网站?  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  Laravel如何使用查询构建器?(Query Builder高级用法)  教你用AI将一段旋律扩展成一首完整的曲子  晋江文学城电脑版官网 晋江文学城网页版直接进入  如何有效防御Web建站篡改攻击?  如何在云主机上快速搭建多站点网站?  Laravel如何使用Blade组件和插槽?(Component代码示例)  Linux系统命令中tree命令详解  如何续费美橙建站之星域名及服务?  如何用wdcp快速搭建高效网站?  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  北京网站制作公司哪家好一点,北京租房网站有哪些?  敲碗10年!Mac系列传将迎来「触控与联网」双革新  详解CentOS6.5 安装 MySQL5.1.71的方法  Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  手机网站制作与建设方案,手机网站如何建设?  如何在七牛云存储上搭建网站并设置自定义域名?  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  网站制作免费,什么网站能看正片电影?  大型企业网站制作流程,做网站需要注册公司吗?  利用 Google AI 进行 YouTube 视频 SEO 描述优化  电商网站制作价格怎么算,网上拍卖流程以及规则?  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?