Bonjour pour faire simple j’ai une variable : State caractere qui est un tableau d’une chaine de caractère statique . @State var caracteres = Array(« J’aime swiftUI ») j’aimerai savoir si je peux l’initialiser de façon dynamique à partir d’une variable.
Ce qui me permettrait de pouvoir changer le texte à l’intérieur du tableau. et en l’occurrence je souhaiterais le faire avec la variable @Binding Var chaineSaisie:String qui est la saisie du textfield de l’utilisateur de la vue précédente.
Je sais par exemple dans que dans le onAppear je peux faire le code qui suit, mais moi je souhaite le faire pour que cela ne pose pas problème dans la boucle « ForEach(0…<caracteres.count) { index in »
Je ne sais pas comment faire.
.onAppear {
caracteres = Array(chaineSaisie)
}
Je souhaite le faire lors de l’initialisation
j’espère être claire.
// exemple complet
import SwiftUI
struct ContentView: View {
@State var texteSaisie = « »
var body: some View {
NavigationView {
MessageToSnake(TexteSaisie: $texteSaisie)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
import SwiftUI
struct SnakeMove: View {
-> @Binding var chaineSaisie:String <-
-> @State var caracteres = Array(« J’aime swiftUI ») <-
@State private var deplacement = CGSize.zero
@State private var changementCouleur = false
@Environment(.presentationMode) var fermerFenetre
var body: some View {
VStack {
Text(chaineSaisie)
Button(action: {
fermerFenetre.wrappedValue.dismiss()
}, label: {
Image(systemName: "xmark.circle.fill")
})
}
Spacer()
HStack(spacing: 0) {
ForEach(0..<caracteres.count) { index in
Text(String(caracteres[index]))
.padding(5)
.font(.title)
.background(self.changementCouleur ? Color.red : Color.blue)
.offset(deplacement)
.animation(Animation.default.delay(Double(index) / 20))
}
}
.gesture(
DragGesture()
.onChanged {self.deplacement = $0.translation}
.onEnded{ _ in
self.deplacement = .zero
self.changementCouleur.toggle()
}
)
.onAppear {
}
Spacer()
}
}
struct SnakeMove_Previews: PreviewProvider {
static var previews: some View {
SnakeMove(chaineSaisie: .constant(""))
}
}
import SwiftUI
struct MessageToSnake: View {
@Binding var TexteSaisie:String
var body: some View {
VStack {
TextField("Texte à saisir", text: $TexteSaisie)
.textFieldStyle(RoundedBorderTextFieldStyle())
NavigationLink(
destination: SnakeMove(chaineSaisie: $TexteSaisie),
label: {
Text("Afficher le serpent !")
})
}
}
}
struct MessageToSnake_Previews: PreviewProvider {
static var previews: some View {
MessageToSnake(TexteSaisie: .constant(« Texte à saisir »))
}
}