Propiedades Computadas en Swift: Uso y Ejemplos Prácticos
Clase 7 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
Viendo ahora - 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
Las computed properties en Swift permiten calcular valores al vuelo y mantener la coherencia del modelo. Aquí verás cómo usar getter y setter para obtener y modificar el center de un rectángulo a partir de su origin y size, evitando inconsistencias comunes entre stored properties.
¿Qué es una computed property y por qué evita inconsistencias?
Una computed property no almacena datos: los calcula según otras propiedades. Así se evita duplicar información y caer en desajustes entre variables relacionadas.
- stored properties: datos guardados como x, y, width, height.
- computed property: valor derivado como center.
- Beneficio clave: si cambias el center, el setter ajusta el origin sin tocar el size.
¿Cómo se evita el desajuste entre origin, size y center?
- Definiendo center como computed property.
- Con un getter que calcula el centro: origin.x + width/2 y origin.y + height/2.
- Con un setter que, dado un nuevo centro, actualiza origin.x e origin.y restando la mitad de width y height.
¿Qué conceptos y habilidades se practican?
- Modelado con estructuras: Point, Size, Rect.
- Uso de getter y setter para encapsular lógica.
- Cálculo geométrico 2D: mitades de width y height.
- Estilo Swift: return implícito en getters de una línea y uso de newValue en setters.
¿Cómo implementar getters y setters en Swift con un rectángulo?
A partir de un Rect definido por origin: Point y size: Size, se calcula un center: Point. El getter suma la mitad de la anchura y altura; el setter reposiciona el origen conservando el tamaño.
struct Point {
var x: Double = 0
var y: Double = 0
}
struct Size {
var width: Double = 0
var height: Double = 0
}
struct Rect {
var origin: Point
var size: Size
var center: Point {
get {
Point(
x: origin.x + size.width / 2,
y: origin.y + size.height / 2
)
}
set {
origin.x = newValue.x - size.width / 2
origin.y = newValue.y - size.height / 2
}
}
}
¿Cómo se vería con parámetro nombrado en el setter?
- Puedes nombrar el parámetro del setter para mayor claridad.
struct Rect2 {
var origin: Point
var size: Size
var center: Point {
get {
Point(x: origin.x + size.width / 2, y: origin.y + size.height / 2)
}
set(newCenter) {
origin.x = newCenter.x - size.width / 2
origin.y = newCenter.y - size.height / 2
}
}
}
¿Qué ejemplos muestran el cálculo del centro y los efectos del setter?
Con un cuadrado de 10 por 10 cuyo origen es (0, 0), el centro se calcula y se actualiza automáticamente al cambiarlo.
var square = Rect(
origin: Point(x: 0, y: 0),
size: Size(width: 10, height: 10)
)
let initialSquareCenter = square.center // (5, 5)
// Mover el centro a (20, 20): ajusta el origen a (15, 15)
square.center = Point(x: 20, y: 20)
// Mover el centro a (18, 3): ajusta el origen a (13, -2)
square.center = Point(x: 18, y: 3)
¿Qué patrones de código optimizan el resultado?
- En el getter, una sola línea permite return implícito.
- En el setter, puedes omitir el nombre y usar newValue.
- Menos líneas y menos variables intermedias para código más claro.
¿Te gustaría ver más patrones de uso de computed properties o casos con otras figuras geométricas? Comparte tu duda o ejemplo ideal para explorarlo juntos.