web-dev-qa-db-fra.com

Comment pourrais-je initialiser la variable @state dans la fonction init de Swiftui?

Voyons le code source simple:

import SwiftUI

struct MyView: View {
    @State var mapState: Int
    
    init(inputMapState: Int)
    {
        mapState = inputMapState //Error: 'self' used before all stored properties are initialized
    } //Error: Return from initializer without initializing all stored properties
    
    var body: some View {
        Text("Hello World!")
    }
}

J'ai besoin de la fonction init ici parce que je veux faire des données en cours de chargement ici, mais il y a un problème, le @State la variable n'a pas pu être initialisée ici! Comment pourrais-je faire avec ça? Peut-être que c'est une question très simple, mais je ne sais pas comment faire. Merci beaucoup!

28
norains

Les wrappers de propriété génèrent du code pour vous. Ce que vous devez savoir, c'est que la propriété stockée générée réelle est du type de wrapper, vous devez donc utiliser ses constructeurs et il est préfixé avec un _. Dans votre cas, cela signifie var _mapState: State<Int>, alors suivez votre exemple:

import SwiftUI

struct MyView: View {
    @State var mapState: Int

    init(inputMapState: Int)
    {
        _mapState = /*State<Int>*/.init(initialValue: inputMapState)
    }

    var body: some View {
        Text("Hello World!")
    }
}
2
GuillermoMP

Je pense qu'il serait préférable d'initialiser lorsque vous écrivez le code.

juste comme

@State var mapetate = 0

ou, si vous souhaitez lier la valeur avec une autre vue, utilisez @Binding.

j'espère que vous le vérifiez aussi.

https://www.hackingwithswift.com/quick-start/swiftui/what-is-the-binding-property-Wrapper

1
Kreimben