前提
ContentViewからLoginViewに渡された@Binding var isPresentingLoginView: Bool
をviewModelから更新したいのですが、viewModelの初期化時に渡せないためどうすれば良いのかが分かっておりません。
実現したいこと
- ContentViewの
isPresentingLoginView
の値を、LoginViewのviewModel内で更新すること。
該当のソースコード
swift
1struct ContentView: View { 2 3 @State private var isPresentingLoginView = true 4 5 var body: some View { 6 if isPresentingLoginView { 7 LoginView(isPresentingLoginView: $isPresentingLoginView) 8 } else { 9 Text("next Login View...") 10 } 11 } 12}
swift
1struct LoginView: View { 2 3 @Binding var isPresentingLoginView: Bool // TODO: viewModelに渡して、viewModel.loginButtonPressed()の中で値を更新したい。 4 @StateObject private var viewModel = LoginViewModel() 5 6 var body: some View { 7 HStack { 8 Spacer() 9 VStack { 10 Spacer() 11 VStack { 12 TextField("ID", text: $viewModel.id) 13 .textFieldStyle(.roundedBorder) 14 SecureField("Password", text: $viewModel.password) 15 .textFieldStyle(.roundedBorder) 16 } 17 .frame(width: 200) 18 Spacer() 19 Button { 20 // ログインのAPIをたたく 21 Task { @MainActor in 22 await viewModel.loginButtonPressed() 23 } 24 } label: { 25 Text("Log in") 26 } 27 .disabled(!viewModel.isLoginButtonEnabled) 28 } 29 Spacer() 30 } 31 .alert(viewModel.errorInfo.title, isPresented: $viewModel.errorInfo.isPresentingError) { 32 Button("閉じる", action: {}) 33 } message: { 34 Text(viewModel.errorInfo.message) 35 } 36 } 37}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。