Eu uso a nova @Observable
macro para meu ViewModel. A classe se parece com isso
@Observable
class TransitiveModel {
private var strings: [String] = []
func getStrings() -> [String] {
return strings
}
func addString(_ item: String) {
strings.append(item)
}
}
Esta é uma simplificação da minha classe real, mas serve como um exemplo mínimo. Você poderia argumentar que neste exemplo um método getStrings() pode não ser necessário, no entanto, na minha classe real eu passo parâmetros e faço alguns cálculos antes, então, por favor, finja que é importante.
Eu tenho uma visão simples
private var model = TransitiveModel()
var body: some View {
VStack {
ForEach(model.getStrings(), id: \.self) { item in
Text(item)
}
Button("Add Item") {
model.addString("Hello")
}
}
}
Quando eu pressiono o botão, eu esperava que nada mudasse visualmente, porque eu não estou diretamente inscrito no strings
-array na View. No entanto, eu observei que a View será atualizada de qualquer maneira, provavelmente porque getStrings()
depende do array, que foi alterado. Eu não quero confiar nesse comportamento a menos que eu tenha certeza de que ele está correto e não é uma falha ou algo assim. Estou certo em pensar que a mudança em strings
acionará a função para ser chamada novamente? E há algum tipo de documentação que me ajudará a entender isso?