Computed properties de solo lectura en Swift
Clase 8 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
Viendo ahora - 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
Domina cómo y cuándo usar propiedades computadas de solo lectura en Swift. Verás por qué un valor derivado no debe modificarse directamente, cómo declarar el getter implícito y un ejemplo práctico: el volumen de un cuboide. Además, se aclara su uso tanto en structs como en classes y se propone un ejercicio aplicado.
¿Qué es una computed property de solo lectura en Swift?
Una variable es de solo lectura cuando no tiene setter y solo tiene getter. Es decir, su valor se calcula a partir de otros datos y no se puede asignar desde fuera. Esto evita inconsistencias: si alguien cambiara el volumen, no habría forma clara de saber cómo ajustar anchura, altura o profundidad.
- Valor derivado: se calcula con otros campos internos.
- Sin setter: no admite asignaciones externas.
- Coherencia de datos: impide cambios ambiguos.
¿Cómo se declara un getter implícito en Swift?
Swift permite omitir la palabra clave get en una computed property de solo lectura. El cuerpo entre llaves define la expresión calculada.
- Sintaxis concisa: var propiedad: Tipo { expresión }.
- Claro y seguro: comunica que no hay setter.
¿Qué pasa si intentas modificar una read-only property?
Si intentas asignar un nuevo valor, Swift marca error: no se puede asignar una propiedad de solo lectura. El valor solo se consulta, no se modifica.
¿Cómo calcular el volumen de un cuboide con una computed property?
Se define un cuboide con anchura, altura y profundidad. El volumen es el producto de esas tres magnitudes. Aquí, lo correcto es exponerlo como propiedad computada de solo lectura.
struct Cuboid {
var width: Double = 0.0
var height: Double = 0.0
var depth: Double = 0.0
// Computed property de solo lectura
var volume: Double {
width * height * depth
}
}
let cuboid = Cuboid(width: 4, height: 5, depth: 2)
let v = cuboid.volume // 40
// cuboid.volume = 57 // Error: propiedad de solo lectura.
- width, height, depth: propiedades almacenadas que se pueden editar.
- volume: propiedad computada sin setter, solo obtiene el valor.
- Intento de asignación: produce error por ser de solo lectura.
¿Por qué el volumen no aparece como editable?
Al inspeccionar la instancia ves las propiedades almacenadas (anchura, altura, profundidad). El volumen solo se expone para consulta, no como campo asignable. Esto refuerza la idea de valor derivado.
¿Se usan en structs y en classes en Swift?
Sí. Aunque el ejemplo se mostró con struct, las propiedades computadas, las propiedades almacenadas y las propiedades perezosas también aplican a las classes. No te limites mentalmente a las estructuras: el patrón sirve en ambos tipos.
- Reutilizable: mismo patrón en structs y classes.
- Encapsulación: calcula internamente valores derivados.
- API clara: evita exponer asignaciones incoherentes.
¿Cómo practicar con un saludo dinámico?
Se sugiere crear una estructura con género, idioma y nombre. La computed property construye el saludo según esos datos, por ejemplo, diciendo "Hola", "Hello" o "Bonjour" y añadiendo el nombre.
struct Saludo {
var genero: String // "femenino" o "masculino"
var idioma: String // "es", "en", "fr"
var nombre: String
var saludo: String {
let base: String
switch idioma {
case "es": base = "Hola"
case "en": base = "Hello"
case "fr": base = "Bonjour"
default: base = "Hola"
}
return "\(base), \(nombre)"
}
}
- Combina datos: idioma y nombre generan el mensaje.
- Evita setter: el saludo se deriva del estado.
- Extensible: puedes ajustar reglas por género cuando lo necesites.
¿Tienes otra idea de computed property útil en tu código? Comparte tu propuesta y cómo la implementarías.