Binding変数の初期化ができず、困っています。お力添えいただけますと幸いです。
やろうとしていること:MyPageViewで@BindingのshouldNavigateを定義し、MyPageViewでボタンを押したらReceive Answers View Model内の関数を呼び出し、その関数内でshouldNavigateをtrueに変えることで、MyPageViewのshouldNavigateの値も更新しようとしています。
前提となるコード:
MyPageView
1struct MyPageView: View { 2 //略 3 @EnvironmentObject var viewModel: AuthViewModel 4 @ObservedObject var myPageViewModel = MyPageViewModel() 5 @ObservedObject var receiveAnswersViewModel = ReceiveAnswersViewModel() 6 @Binding var shouldNavigate: Bool 7 8 init() { 9 myPageViewModel.fetchMySentAnswers() 10 myPageViewModel.fetchMyReceivedAnswers(isUnreleasedOnly: false) 11 } 12 13//略 14 15//Buttonを押したら、次の関数を呼び出し:receiveAnswersViewModel.fetchAnswers(answers_id: answersId ?? 0) 16 17
ViewModel
1class ReceiveAnswersViewModel: ObservableObject { 2 3 @Published var shouldNavigate = false 4 //略 5 //fetchAnswers関数内で下記記載 6 self.shouldNavigate = true 7
MyPageViewの呼び出し元のMainTabView
MainTabView
1 2struct MainTabView: View { 3 @Binding var selectedIndex: Int 4 @ObservedObject var viewModel = MyPageViewModel() 5 6 var body: some View { 7 TabView { 8 9 NotificationView() 10 .onTapGesture { 11 selectedIndex = 0 12 } 13 14 .tabItem { 15 Text("新着") 16 } 17 18 AnswerFeedView() 19 .onTapGesture { 20 selectedIndex = 1 21 } 22 .tabItem { 23 Text("回答する") 24 } 25 26 MyPageView(shouldNavigate: $viewModel.shouldNavigate) //ここでエラー 27 .onTapGesture { 28 selectedIndex = 2 29 } 30 .tabItem { 31 Text("マイページ") 32 } 33 } 34 .onAppear { 35 print("Main Tab View appeared!") 36 } 37 38 39 40 } 41}
エラー内容:
MainTabViewでMyPageViewを呼び出す際に、初期化用の引数を渡そうとしたら、2つのエラーが生じます。
//Argument passed to call that takes no arguments
//Value of type 'ObservedObject<MyPageViewModel>.Wrapper' has no dynamic member 'shouldNavigate' using key path from root type 'MyPageViewModel'
(他の機能開発はこの方法でうまくいっていたので、不可解です。)
@Binding変数を初期化しないといけないので、このままビルドすると、MyPageViewでは下記のようなエラーが出てしまいます。
MyPageView
1self' used before all stored properties are initialized
MyPageView
1Return from initializer without initializing all stored properties
試したこと
なお、[こちらのリンク]を参照し、MyPageViewのイニシャライザの中に下記のように記載すると、
SwiftUI
1 init(shouldNavigate: Binding<Bool>) { 2 self._shouldNavigate = shouldNavigate //追加 3 myPageViewModel.fetchMySentAnswers() 4 myPageViewModel.fetchMyReceivedAnswers(isUnreleasedOnly: false) 5 } 6
MainTabViewで下記のエラーは無くなるものの、
MainTabView
1//Argument passed to call that takes no arguments
もう1つのエラーは残ったままでした。
MainTabView
1//Value of type 'ObservedObject<MyPageViewModel>.Wrapper' has no dynamic member 'shouldNavigate' using key path from root type 'MyPageViewModel' 2
少しでもアドバイス頂戴できますと幸いです。何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。