swift的tuples

作者: 八条8tiao | 来源:发表于2016-07-17 16:29 被阅读116次

Tuples的引入,实在是为我们编写程序带来极大便利。如果没有tuple,当我们在面对一些临时使用的一些自定结构时,我们不得不使用class或struct这种重量级的类型进行定义。但有了tuple,我们可以非常方便快速的将几种类型捏合成一个tuple对象,从而获得一种强大的表达能力。

1、创建tuples

var point = (2,2)

在swift当中我们可以很容的创建tuple对象,point就是一个由两个整数构成的tuple对象,元素之间用逗号分隔(数组,字典元素之间的分隔都是如此),所有的内容用小括号括起来。当然,我们可以构造更为复杂的tuple,几乎所有swift支持的类型(包括tuple自己),都可以作为构造tuple的元素。

var tuple = (2,false,[1,2,3],("a",1))

2、访问并修改tuple元素

我们可以用索引位置来访问tuple的元素,索引位置从0开始,逐一递增的,这是不是有点像数组?

var point = (2,2)
point.0 // 2 , 访问第一个元素
point.1 // 2 , 访问第二个元素

用索引位置虽然可以完成tuple的访问,当这总令人感觉有点遗憾,毕竟0,1只是个数字,除了表达位置以外无法传达更多的逻辑意义。我们本来用point定的是一个直角坐标系的一个点,我们希望用x,y这样的方式来表达才够劲吗。这时候我们可以用命名的方式定义tuple。

var point: (x: Int,y: Int) = (2,2)
point.x // 2 , 访问第一个元素
point.y // 2 , 访问第二个元素

当我们在创建tuple的时候,给每个位置的元素命名之后,我们就可以用元素的名称来访问该元素了,这里需要强调一下tuple的类型,tuple的类型也是有所有元素的类型共同决定的(所以swift没办法提供一个Tuple类型).

tuple中的元素是不可以被删除的,但是可以修改,我们可以用下面的方法来修改tuple中的元素。

var point: (x: Int,y: Int) = (2,2)
point.x = 3  // 修改tuple的第一个元素的值为3,注意我们无法修改元素的数据类型

3、tuple的一些实践

这部分内容参考了“Tuples in Swift, Advanced Usage and Best Practices”,我这里简单列举这篇内容几个很有意思的知识点,建议大家阅读原文。

  • 在本文的开头我们说过,tuple提供我们了一种构建临时结构的灵活能力.选择struct还是tuple来进行构建取决于model是否需要持久的存在。在没有tuple的编程语言里,我们很可能是别无选择的使用一个持久性的结构来构造一个临时用的结构。
  • 如果我们用struct构建的model,需要严格控制数据的私有性,那其实完全可以考虑使用tuple进行构建,因为tuple的数据本来就私有的吗。

  • 可以把tuple作为一个固定大小的序列,比方说如果我们创建一个数据并需要保证它的长度是12,那么这不是很容易了,因为数组确实满足了一个序列的需求,但是我们如何控制别人不会多放入一个数据或者少放入一个数据呢?这里我们不如使用两个包含12个元素的tuple,编译器可以帮助我们检查其长度。

  • 可以用tuple构建复杂的可变参数,这样有点像ruby方法可以把末尾参数当做hash表,可以灵活的添加key:vale类型的参数,真可谓相当方便呀

func varargsFunc(params: (String,Int)...) {

}
  • tuple可以用作func/method参数,这里说的意思是函数的参数列表其实近似一个tuple,所以可以用tuple对象当做函数的参数列表进行传递.
func somefunc(a: String,_ b: Int,_ c: Bool)
   print("Hello,world")
}

let tuple = ("hi",1,true)

someFunc(tuple)

相关文章

  • swift的tuples

    Tuples的引入,实在是为我们编写程序带来极大便利。如果没有tuple,当我们在面对一些临时使用的一些自定结构时...

  • Swift存储数据方式和构造函数

    Swift存储数据方式 Swift有许多种存储数据方式,你可以用枚举(enums),元组(tuples),结构体(...

  • Swift Array VS Tuples

    1、当我们在Array中放置不同类型的数据时,我们无法再对每个数据的type做定义。 元组可以定义元素的类型 元组...

  • swift基础—元组(Tuples)

    元组(tuples)把多个值组合成一个复合值。元组内的值可以是任意类型,并不要求是相同类型。 下面这个例子中, (...

  • 语法进阶-元组

    ---参考Bannings的Swift 元组(Tuples)介绍 1. 元组的定义2.读取元组中的数据3.跳过不关...

  • 自学Swift之元组 tuples

    记得第一眼看到元组(tuples)这个概念的时候,感觉元组(tuples)好 diao 的样子 元组的概念: 元组...

  • swift随笔2-Tuples()

    Tuples元组,相对OC swift新添加的结构,可以存放不同类型的数据,可以作为函数的参数和返回值,作为返回值...

  • 2.6 Swift中的元组(Tuples) [Swift教程]

    1. 本节课将为你演示元组的使用。元组包含不同的数据类型,并组成一个复合值。元组是使用逗号隔开,并使用括号括起来的...

  • [Swift]Tuple(元组的遍历)

    元组概念和用法不再多说 转载一篇文章Swift元组(tuples)最佳代码实战 作者:白马斩尘_Pinch 就能...

  • python - tuples

    tuples tuples are like lists, they have elements which ar...

网友评论

    本文标题:swift的tuples

    本文链接:https://www.haomeiwen.com/subject/rdxpjttx.html