Inicializadores y copias por valor en Swift
Clase 3 de 27 • Curso de Programación Orientada a Objetos en Swift
Contenido del curso
Tipos de Propiedades
- 5

Propiedades Almacenadas en Swift: Uso y Ejemplos Prácticos
04:48 min - 6

Propiedades Lazy en Programación: Uso y Ventajas
07:16 min - 7

Propiedades Computadas en Swift: Uso y Ejemplos Prácticos
10:30 min - 8

Computed properties de solo lectura en Swift
05:14 min - 9

Observers en Swift: willSet y didSet
07:18 min - 10

Variables estáticas en clases, estructuras y enumerados
09:19 min
Métodos, subíndices y herencia
- 11

Métodos de instancia en Swift con self
07:35 min - 12

Métodos Mutantes en Estructuras y Enumerados en Swift
09:05 min - 13

Métodos de clase en Swift: static vs class
10:50 min - 14

Subíndices en Swift: Sintaxis y Aplicaciones Prácticas
09:01 min - 15

Manipulación de Matrices y Subíndices en Programación
12:27 min - 16

Herencia de Clases en Programación Orientada a Objetos
10:14 min - 17

Sobrescritura de Métodos y Propiedades en Clases Derivadas
12:11 min
Inicializadores o constructores
- 18

Inicializadores en Sweet: Creación y Uso Efectivo de Constructores
06:50 min - 19

Modificación de Constructores y Parámetros Opcionales en Swift
10:10 min - 20

Constructores Designados y de Conveniencia en Herencia de Clases
09:37 min - 21

Constructores y manejo de inicialización opcional en Swift
08:42 min - 22

Destructores en Programación: Liberación de Recursos Automática
07:12 min
Encadenamiento opcional
Conclusión
Aprende a distinguir con claridad cómo se crean y copian los datos en Swift. Verás cómo usar los inicializadores por defecto en estructuras, configurar propiedades como width y height, y entender por qué estructuras y enumerados son tipos por valor: al copiar, cada instancia conserva su propio estado.
¿Cómo funcionan los inicializadores por defecto en Swift?
Los inicializadores por defecto de una estructura permiten definir los valores de sus propiedades al crear el objeto. Si la instancia se crea como constante con let, no podrás modificar sus propiedades después. Por eso, debes establecer los valores en el momento de la creación.
¿Cómo definir resoluciones VGA y HD?
En el ejemplo, se modela una resolución con propiedades width y height. Al crear VGA y HD, se pasan los valores en el inicializador.
struct Resolution { var width: Int var height: Int } let vga = Resolution(width: 640, height: 480) let hd = Resolution(width: 1920, height: 1080) print(vga.width) // 640 print(vga.height) // 480
- Estructura +
let: la instancia es inmutable tras crearse. - Inicializador por defecto: acepta cada variable interna como parámetro.
¿let o var al crear una estructura?
letpara instancias que no cambiarán sus propiedades.varsi planeas modificar propiedades más tarde.- Si necesitas fijar valores iniciales y luego cambiar, usa
varpara la instancia.
¿Qué implica que estructuras y enumerados sean tipos por valor?
Cuando asignas una estructura a otra variable, se copia el valor. Cada copia es independiente: cambiar una no afecta a la otra. Lo mismo ocurre con los enumerados.
¿Qué pasa al copiar y modificar una estructura?
A partir de una constante hd, se crea una variable cinema y se modifica solo su width. hd permanece intacta.
let hd = Resolution(width: 1920, height: 1080) var cinema = hd // copia por valor print(cinema.width, cinema.height) // 1920 1080 cinema.width = 2048 // modificamos la copia print(cinema.width, cinema.height) // 2048 1080 print(hd.width, hd.height) // 1920 1080 (no cambia)
- Copia por valor: cada instancia guarda sus propios datos.
- Independencia: modificar
cinemano alterahd.
¿Cómo se comporta un enumerado como CompassPoint?
Los enumerados también son tipos por valor. Copiar un valor y modificar el original no cambia la copia.
enum CompassPoint { case north, south, east, west } var currentDirection: CompassPoint = .north let oldDirection = currentDirection // copia por valor currentDirection = .south print(currentDirection) // south print(oldDirection) // north
Incluso si oldDirection fuera variable, seguiría conservando el valor copiado en el momento de la asignación.
var oldDirection2 = currentDirection // copia actual (south) currentDirection = .west print(currentDirection) // west print(oldDirection2) // south
- Enumerados: se asignan y se copian por valor.
- No hay referencias compartidas: cada variable mantiene su propio estado.
¿Qué palabras clave y conceptos debes recordar?
Comprender estos términos te ayudará a escribir código más claro y predecible.
- Inicializador por defecto: crea instancias pasando valores para cada propiedad variable de la estructura.
- Estructura (
struct): tipo por valor. Las copias son independientes. - Constante (
let) vs variable (var): conlet, la instancia no permite cambios en sus propiedades. Convar, sí. - Propiedades
widthyheight: ejemplo práctico para fijar valores iniciales como 640×480 (VGA) o 1920×1080 (HD). - Enumerado (
enum): tipo por valor, comoCompassPointconnorth,south,east,west. - Copia por valor: al asignar, se duplican los datos, no la referencia.
- Clases: se mencionan como diferentes en su comportamiento, tema a tratar aparte.
¿Te quedó alguna duda sobre inicializadores o copias por valor? Cuéntame en los comentarios qué caso te gustaría ver con más detalle.