元组
元组(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"
通过上述的html" target="_blank">代码示例可以看出,我把someScore元组赋值给了anotherScore,然后修改了anotherScore的第1个元素的值,最后分别打印了someScore和anotherScore第1个元素的值。someScore元组第一个元素的值为Robert,而anotherScore元组第一个元素的值仍然为John。由此可见元组是值类型。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。
本文向大家介绍Swift学习笔记之构造器重载,包括了Swift学习笔记之构造器重载的使用技巧和注意事项,需要的朋友参考一下 与函数一样,方法也存在重载,其重载的方式与函数一致。那么作为构造器的特殊方法,是否也存在重载呢?答案是肯定的。 一、构造器重载概念 Swift中函数重载的条件也适用于构造器,条件如下: 函数有相同的名字; 参数列表不同或返回值类型不同,或外部参数名不同; Swift中的构造器
本文向大家介绍Bootstrap学习笔记之js组件(4),包括了Bootstrap学习笔记之js组件(4)的使用技巧和注意事项,需要的朋友参考一下 这次我们来看下js组件的使用,本篇文章会有点长,希望大家可以耐心看,相信收获会有不少。不少园友加我好友,表示喜欢我写文字的风格,简单明了,这里,再次谢谢你们的支持。一方面,自身技术有限,写的东西都比较基础,另一方面,写的东西,都是根据自己的理解,把复杂
本文向大家介绍JavaScript学习笔记之数组去重,包括了JavaScript学习笔记之数组去重的使用技巧和注意事项,需要的朋友参考一下 推荐阅读:JavaScript学习笔记之数组的增、删、改、查 JavaScript学习笔记之数组求和方法 JavaScript学习笔记之数组随机排序 话说面试常会碰到面试官会问JavaScript实现数组去重的问题,最近刚好在学习有关于JavaScript数组
本文向大家介绍Bootstrap学习笔记之css组件(3),包括了Bootstrap学习笔记之css组件(3)的使用技巧和注意事项,需要的朋友参考一下 今天我们来看看css组件效果以及其中比较重要的类,这些类都不难,关键要熟练掌握,搭配使用,灵活运用。关于前两篇中,css样式和布局的文章,大家可以在之前的文章中阅读。 一、导航组件 自己做了个导航,目前只有一级菜单,下一篇文章中,将
本文向大家介绍python学习笔记之列表(list)与元组(tuple)详解,包括了python学习笔记之列表(list)与元组(tuple)详解的使用技巧和注意事项,需要的朋友参考一下 前言 最近重新再看python的基础知识,感觉自己还是对于这些知识很陌生,需要用的时候还是需要翻书查阅,还是先注重基础吧——我要重新把python的教程阅读一遍,把以前自己忽略的部分学习,加强练习和记忆。 现在读
本文向大家介绍Ruby数组(Array)学习笔记,包括了Ruby数组(Array)学习笔记的使用技巧和注意事项,需要的朋友参考一下 1、数组的定义 Ruby中的数组是动态数组,存储的数据不用限定类型,数组的长度是根据存储需要动态扩展,所以,在进行数据定义的时候,只用用最简单的方式new一个Array对象就可以了,可以使用以下几种方式: 2、数组元素的访问 数组对象访问是通过数组下标进行的,下标从0