@State et @Binding

De WikiSwift

Comment utiliser @State et @Binding ?[modifier | modifier le wikicode]

Premièrement on utilise seulement @State et @Binding lorsque l'on veut qu'il y est une modification de l'interface utilisateur (UI)

struct VueA: View {
    
    @State private var myString: String = ""
    
    var body: some View {
        VStack {
            VueB(myString: $myString)
            VueC(myString: myString)
        }
    }
}

struct VueB: View {
    
    @Binding var myString: String
    
    var body: some View {
        TextField("Placeholder", text: $myString)
    }
}

struct VueC: View {
    
    var myString: String
    
    var body: some View {
        Text(myString)
    }
}

Ma VueB peut modifier ma variable alors j'utilise un @Binding.

Ma VueC ne peut pas modifier ma variable alors pas besoin de @Binding

Pourquoi on utilise des $ et des fois non pour modifier une variable ?[modifier | modifier le wikicode]

struct VueA: View {
    
    @State private var myString: String = ""
    
    var body: some View {
        VueD(myString: $myString)
    }
}

struct VueD: View {
    
    @Binding var myString: String
    
    let hello: String = "Hello"
    let bonjour: String = "Bonjour"
    
    var body: some View {
        VStack {
            TextField("Placeholder", text: $myString)
            Text("Hello")
                .onTapGesture {
                    myString = hello
                }
            
            Text("Bonjour")
                .onTapGesture {
                    myString = bonjour
                }
        }
    }
}

On met un dollars SEULEMENT lorsque le type attendu est un @Binding, ma VueD attend un @Binding alors lorsque je l'utilise je mets un $ -> VueD(myString: $myString)

Un TextField attend également un Binding donc on utilise le $

Dans tout les autres cas, on n'utilise pas le $, comme dans l'exemple suivant

.onTapGesture {
      myString = hello
}