Junior
¿Qué es lazy?
sobes.tech AI
Respuesta de la IA
La palabra clave lazy se usa para la inicialización diferida de una propiedad.
Una propiedad con lazy se inicializa solo en el primer acceso a ella. Esto es útil para:
- Rendimiento: si la creación del objeto requiere muchos recursos, pero no siempre es necesario.
- Evitar dependencias cíclicas durante la inicialización.
- Trabajar con recursos externos o datos que pueden no estar disponibles en el momento de crear el objeto.
Las propiedades lazy deben ser:
- Variables (
var), ya que su valor puede cambiar en el primer acceso. - Sin observadores de propiedades (
willSet,didSet) hasta el primer acceso.
class HeavyResource {
init() {
print("Recurso pesado inicializado")
// Simulación de inicialización costosa
Thread.sleep(forTimeInterval: 1)
}
}
class MyPresenter {
let name = "Presenter"
// propiedad lazy, se inicializa en el primer uso
lazy var heavyResource: HeavyResource = {
print("Creando recurso pesado")
return HeavyResource()
}()
init() {
print("\(name) inicializado")
}
func accessResource() {
print("Accediendo al recurso pesado...")
_ = heavyResource // Aquí se realiza la inicialización de la propiedad lazy
print("Recurso accedido.")
}
}
// Inicializamos el presentador
let presenter = MyPresenter() // Salida: Presenter initialized
// El acceso al recurso ocurre más tarde, cuando realmente se necesita
presenter.accessResource()
/*
Salida:
Accediendo al recurso pesado...
Creando recurso pesado
Recurso pesado inicializado
Recurso accedido.
*/
// El acceso repetido no provoca una re-inicialización
presenter.accessResource()
/*
Salida:
Accediendo al recurso pesado...
Recurso accedido.
*/