web-dev-qa-db-fra.com

didSet pour une variable @Binding dans Swift

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.

9
Bagusflyer

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.

2
rob mayoff