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!
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!")
}
}
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