tipos funciones ios swift ios8 tuples

funciones - ¿Por qué usar tuplas cuando podemos usar la matriz para devolver varios valores en swift?



funciones swift 4 (3)

Las tuplas son estructuras anónimas que pueden usarse de muchas maneras, y una de ellas es hacer que la devolución de múltiples valores de una función sea mucho más fácil.

Las ventajas de usar una tupla en lugar de una matriz son:

  • se pueden almacenar varios tipos en una tupla, mientras que en una matriz está restringido a un solo tipo (a menos que use [AnyObject] )
  • número fijo de valores: no puede pasar menos o más parámetros de lo esperado, mientras que en una matriz puede poner cualquier número de argumentos
  • fuertemente tipado: si se pasan parámetros de diferentes tipos en las posiciones incorrectas, el compilador lo detectará, mientras que el uso de una matriz que no sucederá
  • refactorización: si el número de parámetros, o su tipo, cambia, el compilador producirá un error de compilación relevante, mientras que con matrices que pasarán inadvertidas
  • nombrado: es posible asociar un nombre a cada parámetro
  • la asignación es más fácil y más flexible; por ejemplo, el valor de retorno se puede asignar a una tupla:

    let tuple = functionReturningTuple()

    o todos los parámetros pueden ser extraídos automáticamente y asignados a variables

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

    Y es posible ignorar algunos valores.

    let (param1, _, _) = functionReturningTuple()

  • similitud con los parámetros de función: cuando se llama a una función, los parámetros que pasa son en realidad una tupla. Ejemplo:

    // 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")

    (En desuso en Swift 2) La función también se puede invocar como:

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

Es probable que esta lista no sea exhaustiva, pero creo que hay suficiente para hacer que prefiera las tuplas a las matrices para devolver múltiples valores

Hoy solo estaba pasando por algunos conceptos básicos rápidos y estaba trabajando con algunos ejemplos para entender esos conceptos. Ahora mismo he terminado de estudiar las tuplas.

Tengo una duda, es decir, ¿cuál es la necesidad de usar tuplas? Ya hice algo de investigación aquí es lo que obtuve:

Podemos ser capaces de devolver múltiples valores desde una función. Ok, pero también podemos hacer esto devolviendo una matriz.

Array bien, pero podemos devolver varios valores de diferentes tipos. Ok, genial, pero esto también puede hacerse mediante una matriz de AnyObject como esta:

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

Podemos nombrar los objetos presentes en las tuplas. Ok, pero puedo usar un diccionario de AnyObject.

No estoy diciendo que por qué usar tuplas cuando tenemos esto. Pero debería haber algo que solo la tupla puede hacer o es fácil hacerlo solo con tuplas. Además, las personas que crearon swift no habrían involucrado tuplas en swift si no hubiera una buena razón. Así que debería haber alguna buena razón para que lo involucren.

Así que, por favor, avísenme si hay casos específicos en los que las tuplas son la mejor opción.

Gracias por adelantado.


Por ejemplo, considere este ejemplo simple:

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

Usando Array , para obtener el mismo resultado, tienes que hacer esto:

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

Tuple es mucho más simple y seguro, ¿no?


Tuple es una estructura de datos que es más liviana que una matriz heterogénea. Aunque son muy similares, al acceder a los elementos por índice, la ventaja es que las tuplas se pueden construir muy fácilmente en Swift. Y la intención de introducir / interpolar esta estructura de datos (Tupla) es Múltiples tipos de retorno. Devolver datos múltiples de la persona llamada con un esfuerzo mínimo, esa es la ventaja de tener Tuples. ¡Espero que esto ayude!