En Swift, las clases y las estructuras son bloques de construcción fundamentales que permiten organizar y estructurar el código. Aunque comparten muchas características, también tienen diferencias clave que determinan cuándo usar una u otra.

Conceptos Clave

Clases

  • Definición: Las clases son tipos de referencia, lo que significa que se pasan por referencia y no por valor.
  • Herencia: Las clases pueden heredar de otras clases, permitiendo la reutilización de código y la creación de jerarquías.
  • Deinitializers: Las clases pueden tener deinitializers, que son métodos especiales llamados cuando una instancia de clase se está a punto de liberar.

Estructuras

  • Definición: Las estructuras son tipos de valor, lo que significa que se copian cuando se pasan por el código.
  • Inmutabilidad: Las estructuras son inmutables por defecto, lo que significa que sus propiedades no pueden cambiarse a menos que se declaren como var.
  • Sin Herencia: Las estructuras no pueden heredar de otras estructuras.

Sintaxis Básica

Definición de una Clase

class Persona {
    var nombre: String
    var edad: Int
    
    init(nombre: String, edad: Int) {
        self.nombre = nombre
        self.edad = edad
    }
    
    func describir() -> String {
        return "Nombre: \(nombre), Edad: \(edad)"
    }
}

Definición de una Estructura

struct Punto {
    var x: Int
    var y: Int
    
    func describir() -> String {
        return "Punto en (\(x), \(y))"
    }
}

Ejemplo Práctico

Clase: Persona

class Persona {
    var nombre: String
    var edad: Int
    
    init(nombre: String, edad: Int) {
        self.nombre = nombre
        self.edad = edad
    }
    
    func describir() -> String {
        return "Nombre: \(nombre), Edad: \(edad)"
    }
}

let persona1 = Persona(nombre: "Juan", edad: 30)
print(persona1.describir())  // Salida: Nombre: Juan, Edad: 30

Estructura: Punto

struct Punto {
    var x: Int
    var y: Int
    
    func describir() -> String {
        return "Punto en (\(x), \(y))"
    }
}

var punto1 = Punto(x: 10, y: 20)
print(punto1.describir())  // Salida: Punto en (10, 20)

Comparación: Clases vs Estructuras

Característica Clases Estructuras
Tipo Referencia Valor
Herencia No
Deinitializers No
Copia Por referencia Por valor
Inmutabilidad Mutable Inmutable por defecto

Ejercicios Prácticos

Ejercicio 1: Crear una Clase

Instrucciones: Crea una clase Coche con las propiedades marca, modelo y año. Incluye un método describir que devuelva una cadena con la descripción del coche.

class Coche {
    var marca: String
    var modelo: String
    var año: Int
    
    init(marca: String, modelo: String, año: Int) {
        self.marca = marca
        self.modelo = modelo
        self.año = año
    }
    
    func describir() -> String {
        return "Marca: \(marca), Modelo: \(modelo), Año: \(año)"
    }
}

let coche1 = Coche(marca: "Toyota", modelo: "Corolla", año: 2020)
print(coche1.describir())  // Salida: Marca: Toyota, Modelo: Corolla, Año: 2020

Ejercicio 2: Crear una Estructura

Instrucciones: Crea una estructura Rectangulo con las propiedades ancho y alto. Incluye un método area que calcule y devuelva el área del rectángulo.

struct Rectangulo {
    var ancho: Double
    var alto: Double
    
    func area() -> Double {
        return ancho * alto
    }
}

let rectangulo1 = Rectangulo(ancho: 5.0, alto: 10.0)
print("Área del rectángulo: \(rectangulo1.area())")  // Salida: Área del rectángulo: 50.0

Resumen

En esta sección, hemos aprendido sobre las clases y las estructuras en Swift, sus diferencias y cuándo usar cada una. Las clases son tipos de referencia y permiten la herencia, mientras que las estructuras son tipos de valor y son inmutables por defecto. Hemos visto ejemplos prácticos y realizado ejercicios para reforzar estos conceptos. En la siguiente sección, exploraremos las propiedades y métodos en más detalle.

© Copyright 2024. Todos los derechos reservados