一尘不染

为什么我们可以使用数组快速返回多个值时使用元组

swift

今天,我只是研究一些基本的快速概念,并通过一些示例来理解这些概念。现在,我已经完成了元组的学习。

我有一个疑问,即使用元组有什么需要?是的,我对此做了一些挖掘:

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

数组可以,但是我们可以返回不同类型的多个值。好的,但是这也可以通过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的字典。

我并不是说为什么要使用元组。但是应该有一些只有元组才能够做的事情,或者只有元组才容易做到的事情。而且,如果没有充分的理由,那么创建swift的人就不会让tuple参与其中。因此,应该有一些充分的理由让他们参与其中。

所以,请让我知道在某些情况下元组是最好的选择。

提前致谢。


阅读 189

收藏
2020-07-07

共1个答案

一尘不染

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

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

  • 可以在一个元组中存储多种类型,而在数组中,您只能使用一种类型(除非使用[AnyObject]
  • 固定数量的值:您不能传递比预期更少或更多的参数,而在数组中可以放置任意数量的参数
  • 强类型化:如果将不同类型的参数传递到错误的位置,则编译器将检测到该错误,而使用不会发生的数组
  • 重构:如果参数的数量或它们的类型发生变化,则编译器将产生相关的编译错误,而数组将被忽略
  • named:可以将名称与每个参数关联
  • 分配更容易,更灵活-例如,可以将返回值分配给元组:
    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)

该列表可能并不详尽,但是我认为有足够的理由让您喜欢将元组添加到数组中以返回多个值

2020-07-07