My Xcode is coming up with this error when I try to build "Static method 'buildExpression' requires that 'HomeHeader_Previews' conform to 'View' "

142 views Asked by At

I am not sure what In the code I need to chnage to make the build successful. Here is the code:

import SwiftUI

enum Tab {
    case home,message,calender,profile
}

struct TabBarItem: View {
    let selectedImage: String
    let unSelectedImage: String
    let isSelected: Bool
    let action: () -> Void
    var body: some View {
        Button(action: action) {
            VStack {
                Image(isSelected ? selectedImage : unSelectedImage )
            }
        }
        .foregroundColor(isSelected ? Theme.primaryColor : .secondary)
        .frame(maxWidth: .infinity)
    }
}

struct TabView: View {
    @Binding var tabIdx: Tab

    var body: some View {
        HStack {
            Spacer()
            
            TabBarItem(selectedImage: "ic_selected_home", unSelectedImage: "ic_unselected_home", isSelected: tabIdx == .home) {
                self.tabIdx = .home
            }
            
            Spacer()
            
            TabBarItem(selectedImage: "ic_selected_message", unSelectedImage: "ic_unselected_message", isSelected: tabIdx == .message) {
                self.tabIdx = .message
            }
            
            Spacer()
            
            TabBarItem(selectedImage: "ic_selected_calendar", unSelectedImage: "ic_unselected_calendar", isSelected: tabIdx == .calender) {
                self.tabIdx = .calender
            }
            
            Spacer()
            
            TabBarItem(selectedImage: "ic_selected_profile", unSelectedImage: "ic_unselected_profile", isSelected: tabIdx == .profile) {
                self.tabIdx = .profile
            }
            
            Spacer()
        }
        .padding(.bottom, 30)
        .frame(height: 80)
        .background(
                 Rectangle()
                      .fill(Color.white)
                      .shadow(
                          color: Color.gray.opacity(0.2),
                          radius: 15,
                          x: 0,
                          y: 0
                       )
        )
    }
}

struct BottomTabBar: View {
    @State var tabIdx: Tab = .home
    var body: some View {
        ZStack {
            VStack(spacing: 0) {
                            switch tabIdx {
                            case .home:
                                HomeHeader_Previews() *This is where the error comes up*
                            case .message:
                                MessageHistoryView()
                            case .calender:
                                ScheduleView()
                            case .profile:
                                ProfileView()
                            }
                
                    TabView(tabIdx: self.$tabIdx)
                    
                 }//:VStack
            .ignoresSafeArea(.all)
        }
    }
    
}

struct BottomTabBar_Previews: PreviewProvider {
    static var previews: some View {
        BottomTabBar()
    }
}

The build was working when Xcode was on iOS 14 but I guess because it's iOS 15 something needs to be changed? If you can help would be greatly appreciated. I don't know what more I need to change to make the code work or maybe if I should change it back to iOS 14 but I don't know how.

1

There are 1 answers

0
workingdog support Ukraine On

In your BottomTabBar I assume HomeHeader_Previews() is a PreviewProvider.

Don't put a PreviewProvider inside a View body, use only other Views. This is the reason for your error. PreviewProvider is just to provide preview for Xcode.

Try using the view, such as HomeHeader() in your BottomTabBar