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 】
相关推荐:
如何破解联通资金短缺导致的基站建设难题?
Android滚轮选择时间控件使用详解
在线教育网站制作平台,山西立德教育官网?
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
Swift开发中switch语句值绑定模式
魔毅自助建站系统:模板定制与SEO优化一键生成指南
Java解压缩zip - 解压缩多个文件或文件夹实例
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
如何在IIS中新建站点并解决端口绑定冲突?
Laravel如何为API编写文档_Laravel API文档生成与维护方法
晋江文学城电脑版官网 晋江文学城网页版直接进入
JS中对数组元素进行增删改移的方法总结
如何快速上传自定义模板至建站之星?
Laravel怎么实现验证码(Captcha)功能
python中快速进行多个字符替换的方法小结
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
高防服务器如何保障网站安全无虞?
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
如何在Tomcat中配置并部署网站项目?
如何彻底卸载建站之星软件?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
js实现点击每个li节点,都弹出其文本值及修改
javascript如何操作浏览器历史记录_怎样实现无刷新导航
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
iOS UIView常见属性方法小结
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
网站建设整体流程解析,建站其实很容易!
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
iOS中将个别页面强制横屏其他页面竖屏
,怎么在广州志愿者网站注册?
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
详解MySQL数据库的安装与密码配置
Laravel如何使用Telescope进行调试?(安装和使用教程)
Android GridView 滑动条设置一直显示状态(推荐)
如何挑选高效建站主机与优质域名?
智能起名网站制作软件有哪些,制作logo的软件?
怎么用AI帮你设计一套个性化的手机App图标?
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】

