当我们可以使用数组来返回多个值时,为什么要使用元组

今天我正在经历一些基本的快速概念,并正在用一些例子来理解这些概念。 现在我已经完成了元组学习。

我有一个疑问,即什么是使用元组的需要? 雅我做了一些挖掘这里是我得到的:

我们可以从一个函数返回多个值。 好的,但我们也可以通过返回一个数组来做到这一点。

数组好,但我们可以返回不同types的多个值。 好吧,但这也可以通过这样的AnyObject数组来完成:

func calculateStatistics (scores:[Int])->[AnyObject] { var min = scores[0] var max = scores[0] var sum = 0 for score in scores { if score > max{ max = score } else if score < min{ min = score } sum += score } return [min,max,"Hello"] } let statistics = calculateStatistics([25,39,78,66,74,80]) var min = statistics[0] var max = statistics[1] var msg = statistics[2] // Contains hello 

我们可以命名元组中的对象。 好的,但我可以使用AnyObject的字典。

我不是说当我们有这个时,为什么要使用元组。 但是应该有一些东西只有元组才能够做到或者只能用元组来做到。 而且,如果没有很好的理由,那么迅速创build的人不会迅速卷入元组。 所以他们应该有一些很好的理由参与进来。

所以,请让我知道是否有任何特定的情况下元组是最好的select。

提前致谢。

元组是可以以多种方式使用的匿名结构,其中之一就是使函数返回多个值更加容易。

使用元组而不是数组的优点是:

  • 多个types可以存储在一个元组中,而在一个数组中,仅限于一种types(除非使用[AnyObject]
  • 固定数量的值:你不能传递比预期更less或更多的参数,而在一个数组中,你可以放置任意数量的参数
  • 强types:如果不同types的参数在错误的位置传递,编译器会检测到,而使用不会发生的数组
  • 重构:如果参数的数量或者它们的types发生了变化,编译器将产生相关的编译错误,而数组会被忽视
  • 命名为:可以将名称关联到每个参数
  • 赋值更简单,更灵活 – 例如,可以将返回值赋给一个元组:

     let tuple = functionReturningTuple() 

    或者所有参数都可以自动提取并分配给variables

     let (param1, param2, param3) = functionReturningTuple() 

    而且可以忽略一些值

     let (param1, _, _) = functionReturningTuple() 
  • 与函数参数的相似性:当一个函数被调用时,你传递的参数实际上是一个元组。 例:

     // SWIFT 2 func doSomething(number: Int, text: String) { println("\(number): \(text)") } doSomething(1, "one") // SWIFT 3 func doSomething(number: Int, text: String) { print("\(number): \(text)") } doSomething(number: 1, text: "one") 

    (在Swift 2中不赞成)函数也可以这样调用:

     let params = (1, "one") doSomething(params) 

这个列表可能不是穷尽的,但是我认为这足以让你使用元组来返回多个值

例如,考虑这个简单的例子:

 enum MyType { case A, B, C } func foo() -> (MyType, Int, String) { // ... return (.B, 42, "bar") } let (type, amount, desc) = foo() 

使用Array来得到相同的结果,你必须这样做:

 func foo() -> [Any] { // ... return [MyType.B, 42, "bar"] } let result = foo() let type = result[0] as MyType, amount = result[1] as Int, desc = result[2] as String 

元组更简单更安全,不是吗?

元组是一种比异构arrays轻量级的数据结构。 虽然它们非常相似,但是在索引访问元素的时候,优点是元组可以很容易地在Swift中构造。 而引入/插入这个(Tuple)数据结构的意图是多重返回types。 以最小的努力从“被调用者”中返回多个数据,这就是具有元组的优点。 希望这可以帮助!