You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI编译报错:无法在合理时间内完成表达式类型检查求助

编译错误排查求助

编译时遇到错误:The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions,错误始终出现在searchResults视图的body位置。我知道这类问题通常和代码优化有关,但找不到具体问题点。注释掉IndividualItemView里的@Bindable var review: Review能消除错误,但页面会没有内容显示。试过多种方法都没解决,希望有经验的开发者帮忙看看。

相关代码如下:

fineDine.swift

import SwiftUI
import SwiftData

@main
struct fineDineApp: App {
    var body: some Scene {
        WindowGroup {
            searchResults(searchValue: "")
                .modelContainer(for: Review.self)
        }
    }
}

searchresults.swift

import SwiftUI
import SwiftData

struct searchResults: View {
    @State private var isPresentingNewMealView = false
    @State var searchValue: String
    @Query var review: [Review]
    @Environment(\.modelContext) var modelContext
    
    var body: some View {  <---错误出现位置
        NavigationStack {
            ZStack {
                LinearGradient(gradient: Gradient(colors: [Color(red: 0.9725490196078431, green: 0.9607843137254902, blue: 0.8627450980392157, opacity: 1), Color(red: 0.9137254901960784, green: 0.9254901960784314, blue: 0.8509803921568627, opacity: 1), Color(red: 0.9882352941176471, green: 0.7529411764705882, blue: 0.13333333333333333, opacity: 1), Color(red: 0.9450980392156862, green: 0.47058823529411764, blue: 0.08627450980392157, opacity: 1)]), startPoint: .top, endPoint: .bottom).ignoresSafeArea()
                VStack{
                    Text("Which Food...")
                        .font(.system(size: 30, weight: .bold, design: .default))
                        .padding()
                    Image(systemName: "fork.knife.circle.fill")
                        .font(.system(size: 100))
                        .foregroundStyle(.black)
                    TextField("Enter Food or Restaurant", text: $searchValue)
                        .frame(width: 300, height: 50, alignment: .center)
                        .background(Color.white.opacity(0.4).cornerRadius(10))
                        .fontWeight(.medium)
                        .foregroundColor(Color.black)
                        .multilineTextAlignment(TextAlignment.center)
                    
                    Spacer()
                    
                    List {
                        
                        ForEach(review) { review in
                            NavigationLink(destination: IndividualItemView())
                            {
                                VStack(alignment: .leading)
                                {
                                    Text(review.foodName)
                                        .font(.headline)
                                }
                            }
                        }.listRowBackground(Color.white.opacity(0.4).cornerRadius(5))
                    }  .scrollContentBackground(.hidden)
                    
                    .toolbar {
                     Button(action: {isPresentingNewMealView = true}
                    ) {
                     Image(systemName: "plus")
                     }
                    
                    .sheet(isPresented: $isPresentingNewMealView) {
                         EditMealView(isPresentingNewMealView: $isPresentingNewMealView, mealImage: Image(""), review: Review(foodName: "", restaurantName: "", rating: 3, foodType: "", reviewNotes: "Enter Notes"))
                     }
                     
                     }
                     
                    
                }
            }
                }
            }
        }

#Preview {
    searchResults(searchValue: "")
}

individualItemView.swift

import SwiftUI
import SwiftData

struct IndividualItemView: View {
    @Bindable var review: Review <----注释此行可解决错误但无内容显示
    @Environment(\.modelContext) private var modelContext

    var body: some View {
        NavigationStack {
        ZStack {
            LinearGradient(gradient: Gradient(colors: [Color(red: 0.9725490196078431, green: 0.9607843137254902, blue: 0.8627450980392157, opacity: 1), Color(red: 0.9137254901960784, green: 0.9254901960784314, blue: 0.8509803921568627, opacity: 1), Color(red: 0.9882352941176471, green: 0.7529411764705882, blue: 0.13333333333333333, opacity: 1), Color(red: 0.9450980392156862, green: 0.47058823529411764, blue: 0.08627450980392157, opacity: 1)]), startPoint: .top, endPoint: .bottom).ignoresSafeArea()
            
            VStack {
            VStack(alignment: .leading)
            {
                Text(review.foodName)
                   .font(.system(size: 30, weight: .bold, design: .default))
                Text(review.restaurantName)
                Text(review.foodType)
            }
                VStack {
                    Image("friedFood")
                        .resizable()
                    .frame(width: 300, height: 300)
                        .cornerRadius(5)
                        .padding()
                    Label("\(review.rating)", systemImage: "star.fill")
                        .foregroundStyle(Color.mint)
                        .multilineTextAlignment(.center)
                        .padding()
                    Text(review.reviewNotes)
                        .padding(.horizontal)
                }
            }

        }
    }
    }
}

#Preview {
    //IndividualItemView(review: Review(backingData: any ))
      IndividualItemView(review: Review(foodName: "", restaurantName: "", rating: 0, foodType: "", reviewNotes: ""))
}

EditMealView.swift

import SwiftUI
import PhotosUI
import SwiftData


struct EditMealView: View {
    @Binding var isPresentingNewMealView: Bool
    @Environment(\.modelContext) private var modelContext
    @State var mealImage: Image?
    @State var imageSelection: PhotosPickerItem? = nil
    @Bindable var review: Review
    
    let foodType: [String] = ["Select One...", "Fast Food", "Vegetarian", "Central African", "East African", "North African", "Southern Africa", "West African", "Latin American", "Native American", "Canadian", "Carribean", "Mexican", "American", "Southern American", "Fusion", "Central American", "South American", "Chinese", "Japanese", "Korean", "Indian", "Middle Eastern", "Thai", "Turkish", "Vietnamese", "Italian", "French", "German", "Spanish", "Greek", "Romanian", "Russian", "Eastern European", "Scandinavian", "British", "Dutch", "Swedish", "Norwegian", "Icelandic", "Irish", "Polynesian", "Australian", "New Zealand", "Other"]
    
    var body: some View {
        NavigationStack {
            ZStack {
                LinearGradient(gradient: Gradient(colors: [Color(red: 0.9725490196078431, green: 0.9607843137254902, blue: 0.8627450980392157, opacity: 1), Color(red: 0.9137254901960784, green: 0.9254901960784314, blue: 0.8509803921568627, opacity: 1), Color(red: 0.9882352941176471, green: 0.7529411764705882, blue: 0.13333333333333333, opacity: 1), Color(red: 0.9450980392156862, green: 0.47058823529411764, blue: 0.08627450980392157, opacity: 1)]), startPoint: .top, endPoint: .bottom).ignoresSafeArea()
                
                    .navigationTitle("Add Meal")
                
                VStack{
                    Form {
                        
                        TextField("Food Name", text: $review.foodName)
                            .listRowBackground(Color.clear)
                        
                        TextField("Restaurant", text: $review.restaurantName)
                            .listRowBackground(Color.clear)
                        
                        Picker(selection: $review.foodType, label: Text("Select Style")) {
                            ForEach(0..<foodType.count, id: \.self) {
                                Text(foodType[$0])
                            }
                        }
                            .listRowBackground(Color.clear)
                        
                        VStack{
                            Text("Current \(Image(systemName: "star.fill")) Rating: \((review.rating), format: .number.rounded(increment: 0.1))")
                            Slider(value: $review.rating, in: 1...5, step: 0.5)
                        }
                        .listRowBackground(Color.clear)
                        .padding()
                        VStack{
                            HStack {
                                mealImage?
                                    .resizable()
                                    .frame(width: 300, height: 300)
                                
                            }
                            HStack {
                                Spacer()
                                PhotosPicker( selection: $imageSelection) {
                                    Image(systemName: "photo.circle.fill").imageScale(.large)
                                }
                                .task(id: imageSelection) {
                                    mealImage = try? await imageSelection?.loadTransferable(type: Image.self)
                                }
                                Spacer()
                            }.padding()
                        }
                        .listRowBackground(Color.clear)
                        .padding()
                        
                        TextEditor(text: $review.reviewNotes)
                            .listRowBackground(Color.clear)
                    }
                }
                
                
                
                .scrollContentBackground(.hidden)
                .toolbar {
                    ToolbarItem(placement: .cancellationAction) {
                        Button("Dismiss") {
                            isPresentingNewMealView = false
                        }
                    }
                    ToolbarItem(placement: .confirmationAction) {
                        Button("Add") {
                            let newReview = review
                            modelContext.insert(newReview)
                            isPresentingNewMealView = false
                            
                        }
                    }
                }
                
            }
        }
        

    }
    
}

#Preview {
    do {
        let config = ModelConfiguration(isStoredInMemoryOnly: true)
        let container = try ModelContainer(for: Review.self, configurations: config)
        
        let example = Review(foodName: "Cheetos", restaurantName: "House", rating: 3, foodType: "American", reviewNotes: "Delicious")
       return EditMealView(isPresentingNewMealView: .constant(true), mealImage: Image(""), review: example)
            .modelContainer(container)
    } catch {
        fatalError("Failed to create model container.")
    }

}

内容的提问来源于stack exchange,提问作者user29801994

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:02:02