Estructuras y Clases

1

Programación Orientada a Objetos en Swift

2

Clases vs. Estructuras: Conceptos y Diferencias en Swift

3

Diferencias entre Estructuras y Clases en Swift: Copia de Valores vs Referencias

4

Clases en Swift: Datos por Referencia y Comparación de Objetos

Tipos de Propiedades

5

Programación Swift: Variables y Estructuras

6

Aprovecha las Kotlin Lazy Properties en Desempeño de Apps

7

Propiedades Computadas en Swift: Cálculo Automatizado de Valores

8

Variables de Sólo Lectura en Swift

9

Observadores de Properties en Swift: WillSet y DidSet

10

"Uso de la palabra clave 'static' en Swift"

Métodos, subíndices y herencia

11

Métodos en Clases y Estructuras: Creación y Uso Práctico

12

Métodos Mutables en Swift: Cambia Propiedades en Estructuras y Enumerados

13

Métodos Estáticos y Atributos Compartidos en Videojuegos

14

Subíndices en Swift: Implementación y Uso Práctico

15

Matrices: Manipulación y Operaciones Básicas

16

Herencia de Clases en Swift: Conceptos y Ejemplos Prácticos

17

Sobreescritura de Métodos y Propiedades en Python

Inicializadores o constructores

18

Conversión de Grados: Celsius, Fahrenheit y Kelvin

19

Clases y Constructores en Programación: Sintaxis y Modificación

20

Constructores designados y de conveniencia en Swift

21

Manejo de Constructores y Valores Nullable en Swift

22

Programación Orientada a Objetos: Constructores y Destructores en Java

Encadenamiento opcional

23

Encadenamiento de Opcionales en Swift

24

Creación de Clases y Gestión de Opcionales en Swift

25

Programación Segura con Opcionales en Swift

26

Encadenamiento de Opcionales en Swift: Cómo Evitar Errores Comunes

Conclusión

27

Programación en iOS con Swift: Fundamentos y Prácticas

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Métodos Mutables en Swift: Cambia Propiedades en Estructuras y Enumerados

12/27
Recursos

¿Qué son las funciones mutantes en estructuras y enumerados?

En el mundo de la programación, las estructuras y enumerados son tipos de datos evaluables que, una vez definidos como constantes, no permiten modificar sus valores internos. Sin embargo, en lenguaje Swift, es posible cambiar estos valores a través de métodos llamados funciones mutantes. Este tipo de función utiliza la palabra reservada mutating para indicar que puede modificar los valores de las propiedades de una estructura o enumerado.

¿Cómo funciona una función mutante en una estructura?

Para entender el uso de una función mutante en estructuras, consideremos el siguiente ejemplo donde tenemos una estructura llamada Punto:

struct Punto {
    var x: Int
    var y: Int
    
    mutating func mueve(deltaX: Int, deltaY: Int) {
        x += deltaX
        y += deltaY
    }
}

En este caso, como la función mueve está marcada como mutating, tiene el derecho de modificar los valores de x y y dentro de la estructura Punto. Si nuestro punto es un variable, podemos usar este método para cambiar las coordenadas de manera segura.

¿Por qué es importante la palabra clave mutating?

La palabra reservada mutating es crucial porque:

  • Permite que las funciones cambien los valores de una propiedad dentro de una estructura o enumerado.
  • Resuelve errores de compilación que surgen por intentar modificar propiedades de tipos inmutables.
  • Indica explícitamente un comportamiento que puede sorprender si no se deja claro, es decir, que ciertas acciones pueden cambiar el estado de un objeto.

¿Existen casos especiales para el uso de mutating?

Sí, un caso relevante para usar funciones mutantes es cuando queremos modificar el propio valor de toda la estructura. Imaginemos un método dentro de la misma estructura Punto:

mutating func reposicionar(x: Int, y: Int) {
    self = Punto(x: x, y: y)
}

Aquí, estamos creando un nuevo punto con las coordenadas proporcionadas y reasignándolo a self. Este tipo de función, gracias a la palabra mutating, permite reconfigurar completamente la estructura desde dentro.

¿Cómo actúan las funciones mutantes en los enumerados?

Los enumerados, al igual que las estructuras, pueden beneficiarse de funciones mutantes para alterar sus estados. Supongamos que implementamos un ciclo de estados para un aire acondicionado:

enum EstadoAireAcondicionado {
    case apagado, bajo, alto

    mutating func avanzaEstado() {
        switch self {
        case .apagado:
            self = .bajo
        case .bajo:
            self = .alto
        case .alto:
            self = .apagado
        }
    }
}

En este ejemplo, la función avanzaEstado utiliza mutating para permitir que el estado del aire acondicionado cambie de manera cíclica entre apagado, bajo y alto.

Consideraciones al usar funciones mutantes

Al trabajar con funciones mutantes, es importante considerar lo siguiente:

  • Las funciones mutantes solo pueden ser invocadas en variables de estructuras o enumerados, no en constantes.
  • Este tipo de función es innecesario en clases ya que las clases se manejan por referencia, no por valor.

Las funciones mutantes ofrecen una potente herramienta para modificar los valores interiores de estructuras y enumerados de una manera controlada y explícita, permitiendo mayor flexibilidad en el manejo de datos inmutables.

Aportes 6

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Esta es la segunda clase de esta parte del curso. La primera es esta: https://platzi.com/clases/1791-swift-5-poo/25029-metodos-de-instancia/

Para poder modificar una propiedad desde un método de una estructura el método debe ser marcado como mutating.

struct Point{
	var x: Int;
	var y: Int;
	
	mutating func moveTo(x deltaX: Int, y deltaY: Int){
		self.x = deltaX;
		self.y = deltaY
	}
}

Se me hace un poco extraño que una propiedad de una estructura pueda modificarse desde fuera de la estructura pero no dentro de la misma a no ser que el método sea marcado como mutating.

Que bonito es lo bonito!!!

Me parece genial este lenguaje, es un sabor distinto

`self` en Swift se refiere a la instancia actual de una clase o estructura. En clases, `self` se utiliza para distinguir entre propiedades y parámetros con el mismo nombre. En estructuras, `self` es crucial cuando se trabaja con métodos mutables (`mutating`), ya que permite a esos métodos modificar las propiedades de la instancia. Cuando un método es marcado como `mutating`, significa que puede cambiar el estado de la estructura, lo cual no es posible sin esa palabra clave. Esto se debe a que las estructuras en Swift son tipos de valor, y por lo tanto, sus instancias son inmutables a menos que los métodos sean mutables.

Thank you