Post

Replies

Boosts

Views

Activity

Persistent 'buildExpression unavailable' error in ContentView with switch/AppState
Hi everyone, I'm encountering a persistent build error in a SwiftUI iOS app and I'm running out of ideas. Setup: My ContentView uses two @EnvironmentObjects (GameViewModel, SettingsStore). The GameViewModel has an AppState enum (.welcome, .setup, .game). The ContentView body uses a switch viewModel.currentAppState (wrapped in a Group) to display one of three different views (WelcomeView, SetupView, GameView). Navigation between states is triggered by changing viewModel.currentAppState within withAnimation blocks in the respective subviews. Problem: I consistently get the build error 'buildExpression' is unavailable: this expression does not conform to 'View' pointing to the lines inside the .setup and .game cases of the switch statement in ContentView. Code (ContentView.swift - Simplified Test Version that STILL fails): // Zweck: Steuert die Hauptnavigation basierend auf AppState // KORRIGIERTE VERSION OHNE .animation(...) am Ende import SwiftUI struct ContentView: View { // Zugriff auf das ViewModel, um den AppState zu lesen @EnvironmentObject var viewModel: GameViewModel // SettingsStore wird von untergeordneten Views benötigt @EnvironmentObject var settingsStore: SettingsStore var body: some View { // Optional: Group um das switch-Statement, kann manchmal helfen (kannst du auch weglassen) Group { // Wechsle die Ansicht basierend auf viewModel.currentAppState switch viewModel.currentAppState { case .welcome: WelcomeView() // EnvironmentObjects an WelcomeView übergeben .environmentObject(viewModel) .environmentObject(settingsStore) // Übergangsanimation .transition(.opacity) case .setup: SetupView() // EnvironmentObjects an SetupView übergeben .environmentObject(viewModel) .environmentObject(settingsStore) // Übergangsanimation .transition(.asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading))) case .game: GameView() // EnvironmentObjects an GameView übergeben .environmentObject(viewModel) .environmentObject(settingsStore) // Übergangsanimation .transition(.asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading))) } } // Ende der optionalen Group // !!! WICHTIG: KEIN .animation(...) Modifier hier !!! } } // Vorschau struct ContentView_Previews: PreviewProvider { static var previews: some View { // Erstelle Instanzen für die Vorschau let vmWelcome = GameViewModel() vmWelcome.currentAppState = .welcome let vmSetup = GameViewModel() vmSetup.currentAppState = .setup let vmGame = GameViewModel() vmGame.currentAppState = .game vmGame.currentCard = Card.defaultCards.first let settings = SettingsStore() // Zeige verschiedene Zustände in der Vorschau an Group { ContentView() .environmentObject(vmWelcome) .environmentObject(settings) .previewDisplayName("Welcome State") ContentView() .environmentObject(vmSetup) .environmentObject(settings) .previewDisplayName("Setup State") ContentView() .environmentObject(vmGame) .environmentObject(settings) .previewDisplayName("Game State") } } } Troubleshooting Steps Taken (No Success): Ensured correct placement of .environmentObject modifiers on subviews within the switch. Removed a previous .animation() modifier applied directly to the switch. Ensured state changes triggering transitions are wrapped in withAnimation. Wrapped the switch in a Group. Multiple "Clean Build Folder". Deleted entire Derived Data folder (with Xcode closed). Restarted Xcode and the Mac multiple times. Deleted and recreated ContentView.swift with the code above. Crucially: The errors persist even when replacing WelcomeView(), - - - --- SetupView(), and GameView() with simple Text("...") views inside the switch cases (as shown in the code snippet above). Environment: Xcode Version: newest macOS Version: newest Question: Does anyone have any idea why the compiler would still fail to type-check this switch structure, even when the views inside are simplified to basic Text? What else could I try to diagnose or fix this? Could it be related to the subviews (SetupView/GameView) potentially having their own NavigationView or complexity, even when replaced by Text in the failing ContentView? Thanks for any suggestions!
Topic: UI Frameworks SubTopic: SwiftUI
2
0
28
1w