Skip to content

Instantly share code, notes, and snippets.

@benigumocom
Last active April 8, 2024 08:50
Show Gist options
  • Save benigumocom/54638793f99b0f08e16a479ea0ba3394 to your computer and use it in GitHub Desktop.
Save benigumocom/54638793f99b0f08e16a479ea0ba3394 to your computer and use it in GitHub Desktop.
【SwiftUI】@State と 単方向データフロー 👉 https://android.benigumo.com/20240407/binding-1/
import SwiftUI
struct TestDataFlow: View {
@State var text = ""
@State var isOn = false
var stateHolder = StateHolder()
var body: some View {
Text("\(text) \(isOn)").bold()
// 1 双方向 @State + $
TextField("text", text: $text)
Toggle("toggle", isOn: $isOn)
Divider()
// 2 双方向 @State + Binding()
TextField(
"text",
text: Binding(
get: { text },
set: { newValue in text = newValue }
)
)
Toggle("toggle", isOn: Binding(
get: { isOn },
set: { newValue in isOn = newValue })
)
Divider()
Divider()
Divider()
Text("\(stateHolder.text) \(stateHolder.isOn)").bold()
// 3 単方向 @Obserevable + Binding()
TextField("text", text: Binding(
get: { stateHolder.text },
set: { newValue in stateHolder.text = newValue })
)
Toggle("toggle", isOn: Binding(
get: { stateHolder.isOn },
set: { newValue in stateHolder.isOn = newValue })
)
Divider()
// 4 単方向 @Observable + @Bindable
@Bindable var sh = stateHolder
TextField("text", text: $sh.text)
Toggle("toggle", isOn: $sh.isOn)
}
}
@Observable final class StateHolder {
var text = ""
var isOn = false
}
#Preview {
TestDataFlow()
.frame(width: 150)
}
@benigumocom
Copy link
Author

【SwiftUI】ModelView は StateHolder なのか ? - ModelView の役割
👉 https://android.benigumo.com/20240407/binding-2/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment