Last active
April 8, 2024 08:50
-
-
Save benigumocom/54638793f99b0f08e16a479ea0ba3394 to your computer and use it in GitHub Desktop.
【SwiftUI】@State と 単方向データフロー 👉 https://android.benigumo.com/20240407/binding-1/
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
【SwiftUI】ModelView は StateHolder なのか ? - ModelView の役割
👉 https://android.benigumo.com/20240407/binding-2/