Swift Academy · Lección

Parámetros in-out y múltiples valores de retorno

Modifique argumentos con inout y devuelva varios valores mediante tuplas.

Lección 3 de 412 pasos

Parámetros in-out y múltiples valores de retorno es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

Bienvenida

Normalmente, las funciones de Swift trabajan con copias de los valores. Los parámetros `inout` permiten que una función modifique directamente la variable de quien la llama. Las tuplas permiten que las funciones devuelvan varios valores a la vez.

La palabra clave inout

Marque un parámetro como `inout` para modificar el original: ```swift func doubleInPlace(_ value: inout Int) { value *= 2 } var x = 5 doubleInPlace(&x) print(x) // 10 ``` El prefijo `&` en el sitio de llamada indica que la variable puede modificarse.

inout con estructuras

```swift struct Point { var x: Double; var y: Double } func translate(_ p: inout Point, dx: Double, dy: Double) { p.x += dx p.y += dy } var origin = Point(x: 0, y: 0) translate(&origin, dx: 3.0, dy: 4.0) // origin is now (3.0, 4.0) ```

Restricciones de inout

• Las constantes (`let`) no se pueden pasar como `inout` • Los literales no se pueden pasar como `inout` • Los subíndices y las propiedades calculadas pueden usarse como `inout` si tienen setters ```swift let c = 5 doubleInPlace(&c) // ❌ cannot pass let as inout ```

Devolver varios valores con tuplas

Devuelva varios valores agrupándolos en una tupla: ```swift func minMax(of array: [Int]) -> (min: Int, max: Int) { (array.min()!, array.max()!) } let result = minMax(of: [3, 1, 7, 2]) print(result.min, result.max) // 1 7 ```

Elementos de tupla con nombre y sin nombre

Los elementos con nombre hacen que las tuplas se documenten por sí mismas: ```swift let named: (width: Int, height: Int) = (1920, 1080) print(named.width) // 1920 let unnamed = (1920, 1080) print(unnamed.0) // 1920 ``` Prefiera los nombres en las tuplas que devuelven las funciones.

Desestructuración de retornos de tuplas

Desestructure el valor devuelto por una tupla en varias variables: ```swift let (minimum, maximum) = minMax(of: [5, 3, 8]) print(minimum) // 3 print(maximum) // 8 ``` Use `_` para descartar los elementos que no necesite: `let (minimum, _) = minMax(of: arr)`.

Retornos de tuplas opcionales

Devuelva nil en los casos de error: ```swift func parse(_ s: String) -> (Int, Int)? { let parts = s.split(separator: ",") guard parts.count == 2, let a = Int(parts[0]), let b = Int(parts[1]) else { return nil } return (a, b) } ```

swap con inout

El intercambio clásico con inout: ```swift func swap(_ a: inout T, _ b: inout T) { let temp = a a = b b = temp } var m = 1, n = 2 swap(&m, &n) print(m, n) // 2 1 ``` La biblioteca estándar de Swift ya proporciona `swap(_:_:)`; no necesita escribir su propia implementación.

Cuándo usar inout en lugar de devolver valores

Prefiera devolver un valor nuevo en lugar de modificar un parámetro `inout`: ```swift // Prefer: func normalised(_ v: SIMD3) -> SIMD3 { v / v.magnitude } // Use inout only when mutation is expected API contract, e.g. algorithms on large arrays func sort(_ arr: inout [Int]) { arr.sort() } ```

Comprobación rápida

¿Qué prefijo se requiere en el sitio de llamada al pasar una variable a un parámetro `inout`?

Resumen

Puntos clave: • `inout` permite que las funciones modifiquen las variables de quien las llama; páselas con `&` • No puede pasar constantes `let` ni literales como `inout` • Las tuplas devuelven varios valores de forma ordenada; asigne nombres a los elementos para mayor claridad • Desestructure las tuplas: `let (a, b) = f()` • Prefiera devolver valores nuevos; use `inout` solo cuando la mutación forme parte del contrato de la API Siguiente: funciones como valores de primera clase.
Gratis para empezar

Aprende Swift con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
122
Lecciones
409

Preguntas frecuentes

¿La lección «Parámetros in-out y múltiples valores de retorno» es gratis?

Sí — el texto completo de «Parámetros in-out y múltiples valores de retorno» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Parámetros in-out y múltiples valores de retorno»?

Modifique argumentos con inout y devuelva varios valores mediante tuplas. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Parámetros in-out y múltiples valores de retorno»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Etiquetas de argumentos y nombres de parámetros
  2. Parámetros predeterminados y variádicos
  3. Parámetros in-out y múltiples valores de retorno
  4. Funciones como valores de primera clase
← Volver a Swift Academy