Sobes.tech
Junior — Middle

Como implementar a passagem de um contador num componente View dentro de uma lista para que o seu valor possa ser atualizado de fora?

sobes.tech IA

Resposta da IA

No iOS, se estiver a usar SwiftUI, para passar um contador para um componente View e poder atualizá-lo externamente, deve usar ligação de dados através de @Binding ou estado através de @State e @ObservedObject.

Por exemplo, se tiver uma lista e cada elemento deve mostrar um contador que é atualizado externamente, pode fazer assim:

import SwiftUI

class CounterModel: ObservableObject {
    @Published var count: Int = 0
}

struct CounterView: View {
    @ObservedObject var counter: CounterModel

    var body: some View {
        Text("Count: \(counter.count)")
    }
}

struct ContentView: View {
    @StateObject var counter = CounterModel()

    var body: some View {
        VStack {
            List(0..<5) { _ in
                CounterView(counter: counter)
            }
            Button("Increment") {
                counter.count += 1
            }
        }
    }
}

Aqui, CounterModel é a fonte de verdade para o contador. Todas as CounterView recebem uma referência ao mesmo objeto e atualizam-se quando o valor muda. Assim, a atualização do contador externamente (por exemplo, através de um botão) refletirá em todos os componentes da lista.

Se desejar que cada elemento tenha o seu próprio contador, pode passar modelos ou valores separados com @Binding.