Sobes.tech
Junior — Middle

Hogyan valósítható meg egy számláló átadása egy View komponensbe egy listán belül úgy, hogy az értéke külsőleg frissíthető legyen?

sobes.tech MI

Válasz az MI-től

iOS-en, ha SwiftUI-t használsz, akkor az érték megosztásához a View komponenssel és külső frissítéséhez adat kötést kell alkalmazni @Binding-on keresztül, vagy állapotot @State és @ObservedObject segítségével.

Például, ha van egy listád, és minden elemnek egy olyan számlálója van, amit külsőleg frissítenek, így teheted:

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
            }
        }
    }
}

Itt a CounterModel a valódi forrása a számlálónak. Minden CounterView ugyanarra az objektumra hivatkozik, és frissül, amikor az érték változik. Így a külső (pl. gombnyomás által) történő frissítés minden listában lévő komponensen megjelenik.

Ha minden elemnek saját számlálója legyen, külön modelleket vagy értékeket adhatunk át @Binding segítségével.