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

Ios 当我们可以使用数组在swift中返回多个值时,为什么要使用元组,ios,swift,ios8,tuples,Ios,Swift,Ios8,Tuples,今天,我刚刚介绍了一些基本的swift概念,并用一些例子来理解这些概念。现在我已经完成了元组的学习 我有一个疑问,即使用元组有什么必要?是的,我在这上面做了一些挖掘,这是我得到的: 我们可以从一个函数返回多个值。好的,但是我们也可以通过返回数组来实现 数组可以,但我们可以返回不同类型的多个值。好的,很酷,但这也可以通过如下任意对象数组来完成: func calculateStatistics(分数:[Int])->[AnyObject] { var min=分数[0] var max=分数[0]

今天,我刚刚介绍了一些基本的swift概念,并用一些例子来理解这些概念。现在我已经完成了元组的学习

我有一个疑问,即使用元组有什么必要?是的,我在这上面做了一些挖掘,这是我得到的:

我们可以从一个函数返回多个值。好的,但是我们也可以通过返回数组来实现

数组可以,但我们可以返回不同类型的多个值。好的,很酷,但这也可以通过如下任意对象数组来完成:

func calculateStatistics(分数:[Int])->[AnyObject]
{
var min=分数[0]
var max=分数[0]
var总和=0
以分数求分数
{
如果分数>最大值{
最大值=分数
}
否则,如果得分
我们可以命名元组中存在的对象。好的,但我可以使用任何对象的字典

我并不是说当我们有了这个的时候为什么要使用元组。但是应该有一些只有元组才能做的事情,或者只有元组才容易做到。此外,如果没有充分的理由,创建swift的人不会在swift中包含元组。因此,他们应该有一些很好的理由参与其中

所以伙计们,请让我知道是否有任何特定的情况下,元组是最好的选择


提前感谢。

元组是一种比异构数组更轻的数据结构。虽然它们非常相似,但在通过索引访问元素时,优势在于可以很容易地在Swift中构造元组。引入/插入此(元组)数据结构的目的是多个返回类型。以最小的工作量从“被调用方”返回多个数据,这就是具有元组的优势。希望这有帮助

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

enum MyType {
    case A, B, C
}

func foo() -> (MyType, Int, String) {
    // ...
    return (.B, 42, "bar")
}

let (type, amount, desc) = foo()
使用
数组
,要获得相同的结果,必须执行以下操作:

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

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

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

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

  • 一个元组中可以存储多种类型,而在数组中只能存储一种类型(除非使用
    [AnyObject]
  • 固定数量的值:您不能传递比预期少或多的参数,而在数组中可以放置任意数量的参数
  • 强类型:如果不同类型的参数被传递到错误的位置,编译器将检测到这一点,而使用一个不会发生的数组
  • 重构:如果参数的数量或类型发生变化,编译器将产生一个相关的编译错误,而数组将不被注意地传递
  • 命名:可以将名称与每个参数关联
  • 赋值更简单、更灵活-例如,可以将返回值赋值给元组:

    let tuple = functionReturningTuple()
    
    或者,可以自动提取所有参数并将其分配给变量

    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)
    

这个列表可能并不详尽,但我认为这足以让您喜欢使用元组而不是数组来返回多个值

理想情况下,元组用于从函数返回多个命名数据以供临时使用。如果元组的作用域在程序中是持久的,那么您可能希望将该数据结构建模为类或结构

尝试编写一个函数,返回两个不同类型的值,但不使用tuple@BryanChen您可以看到我添加的示例代码,它返回AnyObject的数组。传递给函数的参数不是元组。不能有一个元素元组,但可以有一个带一个参数的函数。上述剂量测定代码(参数)也将不再适用于Swift 3。
let params = (1, "one")
doSomething(params)