I'm having a problem initialising my arrays in my view:
struct ProjectList: View
{
@ObservedObject var store: ProjectStore
@Binding var searchText: String
@State private var query: [Project] = []
@State private var indexes: [String] = ["E","F"]
init(store: ProjectStore, searchText: Binding<String>)
{
self.store = store
self._searchText = searchText
self.query = []
self.indexes = ["C","D"]
indexes = ["A","B"] //store.getIndexes(search: searchText.wrappedValue)
print (indexes)
}
}
indexes is being set to ["E","F"] not ["A","B"] in my init routine as I would have expected. What is happening?
Just don't init state when declare (because it is initialised only once and then works during view life-time, ie in body)
@State private var indexes: [String] // << only declare
init(store: ProjectStore, searchText: Binding<String>)
{
...
self._indexes = State(initialValue: ["C","D"]) // initialise !!
@State is property wrapper that means it takes the input of wrapped value and then modifies it, you should never set @State var in init, you have to set @State var directly if you really wanna initialize it in init you have to use init of @State since @State is a struct with syntactic sugar with @. Change
init(store: ProjectStore, searchText: Binding<String>)
{
self.store = store
self._searchText = searchText
self.query = []
self.indexes = ["C","D"]
indexes = ["A","B"] //store.getIndexes(search: searchText.wrappedValue)
print (indexes)
}
to :
init(store: ProjectStore, searchText: Binding<String>)
{
self.store = store
self._searchText = searchText
self.query = []
self.indexes = ["C","D"]
indexes = State(initialValue: ["C","D"]) //changed value
print (indexes)
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With