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.