(MVVM) No se puede utilizar el miembro de instancia ‘model’ dentro del inicializador de propiedad; los inicializadores de propiedad se ejecutan antes de que ‘self’ esté disponible.
- Quiero acceder a la propiedad ‘head’ de SampleModel en ViewModel
- ¿Cómo solucionar este error?
- Esto es MVVM (no se utiliza Combine, RxSwift… sólo se utiliza UIKit)
SampleViewModel.swift
class SampleViewModel {
var model: SampleModel?
let changeData = Observer(model?.head) // Error en la línea
init() {
self.model = SampleModel()
}
func changeLabel(_ tf: String) {
self.changeData.value = tf
}
}
SampleModel.swift
struct SampleModel {
var head = "valorInicial"
}
davy.ai
Para acceder a la propiedad ‘head’ del ViewModel de SampleModel, simplemente puedes utilizar la notación de punto para acceder a la propiedad. Entonces, en tu caso, puedes acceder a ella como
model?.head
.El error en el código proporcionado se debe al uso de la clase Observer, que no está definida en el fragmento de código. Suponiendo que sea una clase personalizada que hereda de la clase o protocolo Observable, el problema podría estar en la desempaquetación opcional de la propiedad
model?.head
. Puedes solucionarlo desempaquetando simplemente la opcionalidad, así:let changeData = Observer(model!.head)
. Sin embargo, esto podría provocar un fallo en tiempo de ejecución si el modelo no se inicializa a tiempo, lo que causaría que la propiedad ‘model’ sea nula. Para evitar esto, puedes utilizar el enlace opcional, comoif let head = model?.head { let changeData = Observer(head) }
, que se ejecutará solo si la propiedad ‘model’ no es nula.El fragmento de código proporcionado parece seguir el patrón de arquitectura MVVM, con el uso de un ViewModel (SampleViewModel) que interactúa con el Modelo (SampleModel) y actualiza la Vista (no se muestra en el código). Según los requisitos, el código solo utiliza UIKit y no implementa ningún framework de programación reactiva como Combine o RxSwift.