I am getting an error Static method ‘buildExpression’ requires that ‘ToolbarItem<(), Button<some View>>’ conform to ‘View’. This error is the only error that I am currently facing. The code was running before with the same code, however all of a sudden, the error is shown. I tried to revert to the last best-known configuration code but the problem seems to exist since I added enum Sort.
I am unable to figure out the issue.
Kindly Help me with this issue.
issue at -> //ToolbarItem(placement: .navigationBarTrailing)
//
// ContentView.swift
// Registration
//
// Created by Bibin Mathew on 7/2/24.
//
import SwiftUI
struct SearchConfig: Equatable
{
enum Filter
{
case all, isAdult
}
var query: String = ""
var filter: Filter = .all
}
enum Sort
{
case asc, desc
}
struct ContentView: View
{
@State private var isShowingNewRegistration = false
@FetchRequest(fetchRequest: Registration.all()) private var registrations
@State private var searchConfig: SearchConfig = .init()
@State private var sort: Sort = .asc
var provider = RegistrationsProvider.shared
var body: some View
{
NavigationStack
{
List
{
ForEach(registrations)
{
registration in
ZStack(alignment: .leading)
{
NavigationLink(destination: RegistrationDetailView(registration: registration))
{
EmptyView()
}
}
.opacity(0)
RegistrationRowView(registration: registration)
}
}
.searchable(text: $searchConfig.query)
.toolbar
{
ToolbarItem(placement: .navigationBarLeading)
{
Button
{
isShowingNewRegistration.toggle()
}
label:
{
Image(systemName: "plus").font(.title2)
}
}
ToolbarItem(placement: .navigationBarTrailing) {
Menu {
Section {
Text("Filter")
Picker(selection: $searchConfig.filter) {
Text("All").tag(SearchConfig.Filter.all)
Text("Favourites").tag(SearchConfig.Filter.fave)
} label: {
Text("Filter Faves")
}
}
Section {
Text("Sort")
Picker(selection: $sort) {
Label("Asc", systemImage: "arrow.up").tag(Sort.asc)
Label("Desc", systemImage: "arrow.down").tag(Sort.desc)
} label: {
Text("Sort By")
}
}
} label: {
Image(systemName: "ellipsis")
.symbolVariant(.circle)
.font(.title2)
}
}
}
.sheet(isPresented: $isShowingNewRegistration)
{
NavigationStack
{
CreateRegistrationView(vm: .init(provider: provider))
}
}
.navigationTitle("Registrations")
.onChange(of: searchConfig)
{
newConfig in registrations.nsPredicate = Registration.filter(with: newConfig)
}
}
}
}
#Preview
{
NavigationStack
{
let emptyPreview = RegistrationsProvider.shared
ContentView(provider: emptyPreview)
.environment(.managedObjectContext, emptyPreview.viewContext)
.previewDisplayName("Contacts with No Data")
}
}
Bibin Mathew is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.