import SwiftUI
struct ContentView: View {
@State private var openSheet = false
@State private var foo = 0
var body: some View {
Button {
setFoo(100)
openSheet = true
} label: {
Text("Open Sheet")
}
.padding()
.frame(width: 400, height: 300, alignment: .center)
.sheet(isPresented: $openSheet) {
Text(String(foo))
.padding()
.frame(width: 200, height: 150, alignment: .center)
}
}
private func setFoo(_ foo:Int) {
self.foo = foo
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
When above code ran, the result was "0" instead of "100". However, if I added ".onChange(of:)" function, result changed to "100".
import SwiftUI
struct ContentView: View {
@State private var openSheet = false
@State private var foo = 0
var body: some View {
Button {
setFoo(100)
openSheet = true
} label: {
Text("Open Sheet")
}
.padding()
.frame(width: 400, height: 300, alignment: .center)
.sheet(isPresented: $openSheet) {
Text(String(foo))
.padding()
.frame(width: 200, height: 150, alignment: .center)
}
.onChange(of: openSheet) { newValue in
}
}
private func setFoo(_ foo:Int) {
self.foo = foo
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Any idea why this happens?