Normalement, nous pouvons utiliser didSet
dans Swift pour surveiller les mises à jour d'une variable. Mais cela n'a pas fonctionné pour un @Binding
variable. Par exemple, j'ai le code suivant:
@Binding var text {
didSet {
......
}
}
Mais le didSet
n'a jamais été appelé. Une idée? Merci.
Vous ne devriez pas avoir besoin d'un didSet
observateur sur un @Binding
.
Si vous voulez un didSet
parce que vous voulez calculer autre chose à afficher lorsque text
change, calculez-le simplement. Par exemple, si vous souhaitez afficher le nombre de caractères dans text
:
struct ContentView: View {
@Binding var text: String
var count: Int { text.count }
var body: some View {
VStack {
Text(text)
Text(“count: \(count)”)
}
}
}
Si vous souhaitez observer text
parce que vous souhaitez apporter d'autres modifications à votre modèle de données, alors observer la modification de votre View
est incorrect. Vous devriez observer le changement ailleurs dans votre modèle, ou dans un objet contrôleur, pas depuis votre View
. N'oubliez pas que votre View
est un type valeur, pas un type de référence. SwiftUI le crée en cas de besoin et peut en stocker plusieurs copies, voire aucune copie.