web-dev-qa-db-fra.com

Problème d'initialisation de SwiftUI @State var

Je voudrais initialiser la valeur d'un var @State Dans SwiftUI à travers la méthode init() d'un Struct, afin qu'il puisse prendre le texte approprié d'un dictionnaire préparé pour la manipulation fins dans un TextField. Le code source ressemble à ceci:

struct StateFromOutside: View {
    let list = [
        "a": "Letter A",
        "b": "Letter B",
        // ...
    ]
    @State var fullText: String = ""

    init(letter: String) {
        self.fullText = list[letter]!
    }

    var body: some View {
        TextField($fullText)
    }
}

Malheureusement, l'exécution échoue avec l'erreur Thread 1: Fatal error: Accessing State<String> outside View.body

Comment puis-je résoudre la situation? Merci beaucoup d'avance!

35
Daniel Messner

La réponse de Bogdan Farca est juste pour ce cas, mais nous ne pouvons pas dire que c'est la solution pour la question posée, car j'ai trouvé qu'il y avait un problème avec le champ de texte dans la question posée. Nous pouvons toujours utiliser l'init pour le même code Alors regardez dans le code ci-dessous, il montre la solution exacte pour la question posée.

struct StateFromOutside: View {
    let list = [
        "a": "Letter A",
        "b": "Letter B",
        // ...
    ]
    @State var fullText: String = ""

    init(letter: String) {
        self.fullText = list[letter]!
    }

    var body: some View {
        VStack {
            Text("\(self.fullText)")
            TextField("Enter some text", text: $fullText)
        }
    }
}

Et utilisez-le en appelant simplement à l'intérieur de votre vue

struct ContentView: View {
    var body: some View {
        StateFromOutside(letter: "a")
    }
}
0
bhargav K