One of the beautiful things about SwiftUI is its useful managed state, by using an environment we can have live access to any of its objects, however sometimes while using a ForEach
the changes are not reflected, let's see why.
If you simply do:
@EnvironmentObject var myState: MyState
ForEach(myState.userWallets) { wallet in
MyView(wallet: wallet)
}
you will get a positive result, however there is a hidden "bug", in order to see the changes reflected on MyView
and sub-views once such model in the environment changes, you need to apply the binding property otherwise you'll have to do tricky things such as .onAppear
, .onChange
, etc... which are not necessary. Let SwiftUI understand this is a model that you care about its live content, by binding it, so the ForEach
looks like: ForEach($myState.userWallets) { wallet in
Of course you don't need to bind all the way the rabbit hole, but it's good to know why this happens :)
Simple but tricky... for mre info look at the docs.