Sobes.tech
Junior

¿En qué consiste la diferencia entre clases y estructuras en el lenguaje de programación Swift?

sobes.tech AI

Respuesta de la IA

Las clases son tipos de referencia, las estructuras son tipos de valor.

Diferencias principales:

  • Herencia: Las clases soportan herencia, las estructuras no.
  • Conversión de tipos: Permite verificar e interpretar el tipo de una instancia de clase en tiempo de ejecución.
  • Desinicialización: Las clases tienen destructores (deinit) para liberar recursos, las estructuras no.
  • Contador de referencias: Las clases usan conteo automático de referencias (ARC) para gestionar la memoria. Las estructuras se copian al pasarlas o asignarlas (puede aplicarse copy-on-write para optimización).
  • Métodos mutantes: Métodos que modifican las propiedades de una instancia de estructura o enumeración deben estar marcados con la palabra clave mutating. Para las clases, esto no es necesario.

Ejemplo de creación:

// Estructura
struct Point {
    var x: Int
    var y: Int
}

// Clase
class Circle {
    var radius: Double
    var center: Point

    init(radius: Double, center: Point) {
        self.radius = radius
        self.center = center
    }
}

Ejemplo de comportamiento al asignar:

// Estructura
var point1 = Point(x: 1, y: 2)
var point2 = point1 // Se crea una copia
point2.x = 10

print(point1.x) // Salida: 1

// Clase
var circle1 = Circle(radius: 5.0, center: Point(x: 0, y: 0))
var circle2 = circle1 // Se realiza una asignación de referencia
circle2.radius = 10.0

print(circle1.radius) // Salida: 10.0