Clases y Herencia en Swift: Diferencias entre Class y Struct
Clase 17 de 25 • Curso de Swift para Apps iOS
Resumen
¿Cómo definir una clase en Swift?
El lenguaje Swift ofrece características únicas para la programación orientada a objetos. Uno de los elementos fundamentales es la definición de clases, que se distingue por una estructura específica. Vamos a crear una clase Student
en Swift y examinar sus diferencias clave con un struct
.
import Foundation
public class Student {
var name: String
let age: Int
var email: String
var subjects: [Subject]
var scores: [Double]
public init(name: String, age: Int, email: String, subjects: [Subject], scores: [Double]) {
self.name = name
self.age = age
self.email = email
self.subjects = subjects
self.scores = scores
}
public func studentDescription() -> String {
// Implementación de la descripción del estudiante
return ""
}
}
¿Qué hace especial a las clases en Swift?
Las clases en Swift son esenciales debido a su capacidad para soportar la herencia, lo que significa que una clase puede heredar las propiedades y métodos de otra. Esto permite una estructura jerárquica y reutilización del código. Por ejemplo, una clase AdvancedStudent
puede heredar de Student
:
public class AdvancedStudent: Student {
var extraPoints: Double
public init(name: String, age: Int, email: String, subjects: [Subject], scores: [Double], extraPoints: Double) {
self.extraPoints = extraPoints
super.init(name: name, age: age, email: email, subjects: subjects, scores: scores)
}
override public func studentDescription() -> String {
// Implementación especializada del estudiante avanzado
return "Estudiante avanzado"
}
}
¿Cómo iniciar una instancia de clase en Swift?
Crear instancias de una clase en Swift es directo. Aquí mostramos cómo iniciar un Student
y un AdvancedStudent
, utilizando sus propiedades únicas y métodos para generar descripciones personalizadas.
let student1 = Student(name: "Thiago", age: 18, email: "thiago@g.com", subjects: [mathSubject], scores: [70])
let student2 = AdvancedStudent(name: "María", age: 19, email: "m@g.com", subjects: [mathSubject], scores: [80], extraPoints: 10)
print(student1.studentDescription())
print(student2.studentDescription())
¿Por qué utilizar clases en lugar de structs?
La diferencia crucial entre class
y struct
en Swift radica en la capacidad de herencia de las clases. En la programación orientada a objetos, esto es fundamental para extender el comportamiento de las clases y reutilizar el código de manera eficiente. Mientras que las clases permiten crear jerarquías complejas y personalizadas, los structs son más eficientes para estructuras de datos que no necesitan heredar propiedades o métodos.
Ejemplo práctico de uso de clases avanzadas
Las clases permiten implementar comportamientos personalizados, lo cual es esencial para casos como estudiantes avanzados con características adicionales. Imaginemos que queremos añadir un sistema de calificaciones extra para trabajos realizados, algo que es posible gracias a la herencia y sobreescritura en Swift.
override public func studentDescription() -> String {
var description = super.studentDescription()
description += " - Puntos extra: \(extraPoints)"
return description
}
Este uso de la herencia y la sobreescritura en Swift permite generar sistemas complejos de una manera comprensible y eficiente.
¡Sigamos adelante!
El aprendizaje de Swift y la programación orientada a objetos te abre un mundo de posibilidades para crear aplicaciones poderosas y eficientes. Practica definiendo más clases y experimentando con la herencia en tus propios proyectos.