Las estructuras y clases (colectivamente: "tipos") pueden tener sus propias variables y constantes, y estas son llamadas propiedades. Éstas te permiten añadir valores a tus tipos para representarlos únicamente, pero como los tipos también pueden tener métodos puedes hacer que ellos se comporten de acuerdo a su propio dato.
Veamos un ejemplo:
struct Person {
var clothes: String
var shoes: String
func describe() {
print("I like wearing \(clothes) with \(shoes)")
}
}
let taylor = Person(clothes: "T-shirts", shoes: "sneakers")
let other = Person(clothes: "short skirts", shoes: "high heels")
taylor.describe()
other.describe()
Como puedes ver, cuando utilizas una propiedad dentro de un método, este utilizará automáticamente el valor que pertenece al mismo objeto.
Swift te permite adicionar código que será ejecutado cuando una propiedad está a punto de cambiar o ha sido cambiada. Por ejemplo, esta es frecuentemente una buena vía para actualizar una interfaz de usuario cuando un valor cambia.
Existen dos tipos de observadores de propiedades: willSet
y didSet
, y son llamados antes o después que una propiedad ha sido cambiada. En willSet
Swift le brinda a tu código un valor especial llamado newValue
que contiene el nuevo valor que tendrá la propiedad, y en didSet
se te brinda oldValue
para representar el valor anterior.
Adicionemos dos observadores de propiedades a la propiedad clothes
de una estructura Person
:
struct Person {
var clothes: String {
willSet {
updateUI(msg: "I'm changing from \(clothes) to \(newValue)")
}
didSet {
updateUI(msg: "I just changed from \(oldValue) to \(clothes)")
}
}
}
func updateUI(msg: String) {
print(msg)
}
var taylor = Person(clothes: "T-shirts")
taylor.clothes = "short skirts"
Esto imprimirá los mensajes "I'm changing from T-shirts to short skirts" y "I just changed from T-shirts to short skirts."
Es posible crear propiedades que son de hecho código tras bastidores. Ya utilizamos el método uppercased()
en cadenas de caracteres, por ejemplo, pero también existe una propiedad llamada capitalized
que es calculada cuando se necesita, en lugar de que cada cadena de caracteres siempre almacene una versión en mayúsculas de sí misma.
Para hacer una propiedad computada, coloca una llave de apertura después de tu propiedad y luego utiliza get
o set
para hacer que una acción ocurra en el tiempo apropiado. Por ejemplo, si quisiéramos añadir una propiedad ageInDogYears
que automáticamente devuelva la edad de una persona multiplicada por siete, haríamos esto:
struct Person {
var age: Int
var ageInDogYears: Int {
get {
return age * 7
}
}
}
var fan = Person(age: 25)
print(fan.ageInDogYears)
Las propiedades computadas son cada vez más comunes en los códigos de Apple, pero menos comunes en los códigos de los usuarios.
Nota: Si pretendes utilizarlas solamente para leer datos puedes eliminar completamente la parte del get
, como aquí:
var ageInDogYears: Int {
return age * 7
}
SPONSORED Take the pain out of configuring and testing your paywalls. RevenueCat's all new Paywall Editor allow you to remotely configure your paywall view without any code changes or app updates.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.