在ForEach函数SwiftUI中使用视图时,表达式类型在没有更多上下文的情况下是不明确的

在ForEach函数SwiftUI中使用视图时,表达式类型在没有更多上下文的情况下是不明确的,swiftui,Swiftui,我不断地得到这个错误,当我取出返回值时,它仍然给我一个无法生成表达式诊断的错误;请提交错误报告 struct DailyLogView: View { @State var Meals : [meal] var columns = Array(repeating: GridItem(.flexible(),spacing: 20), count: 2) var body: some View { return ZStack{ //e

我不断地得到这个错误,当我取出返回值时,它仍然给我一个无法生成表达式诊断的错误;请提交错误报告

struct DailyLogView: View {
  
    
    @State var Meals : [meal]
    var columns = Array(repeating: GridItem(.flexible(),spacing: 20), count: 2)
    
    var body: some  View {
      return ZStack{ //error here 
        
            LazyVGrid(columns: columns, spacing: 30){
          
                ForEach ( Meals ){ meal in
               
                    VStack(alignment: .leading, spacing: 15){
                    
                    
                        MealCardView( mealName: meal?.Name, totalCalories: meal?.totalCalories, mealTime: meal?.Time, mealImage: meal?.Image)
                    
                    }
                }
            }
        }
    }
}

我确保结构符合可识别类型



 struct meal : Identifiable {
    
    var id = UUID()
    var Name : String
    var Time : String
    var totalCalories : Int
    var Image : String

}

如果我不使用MealCardView,则不会发生错误,因此我认为这可能与此有关

struct MealCardView: View {
    
    
    @Binding var mealName:String
    @Binding var totalCalories:Int
    @Binding var mealTime:String
    @Binding var mealImage:String
    
    var body: some View {
        ZStack{
            HStack{
                VStack{
                    Text(self.mealName)
                        .bold()
                        .foregroundColor(.white)
                    Text("Calories:\(self.totalCalories)")
                        .foregroundColor(.white)
                }
            }
        }
        .padding(10)
        .background(Color.blue)
        .cornerRadius(20)
    }
}

MealCardView
需要对值进行绑定,因此需要将绑定传递给数组元素

您可以通过迭代数组的索引来实现这一点,然后使用数组下标的投影值(它是一个绑定)到元素

首先,我建议您遵守Swift命名约定,将类型改为大写,属性/变量改为大写:

struct Meal: Identifiable {
    var id = UUID()
    var name : String
    var time : String
    var totalCalories : Int
    var image : String
}
此外,您可以只传递整个
mein
变量,而不是逐个传递属性

struct MealCardView: View {
   @Binding var meal: Meal
   // ...
}

struct DailyLogView: View {
   @State var meals: [Meal]

   var body: some View {
      
      ForEach(meals.indices, id: \.self) { index in
         MealCardView(meal: self.$meals[index])
      }

   }
}

当然,如果您坚持一个接一个地传递属性,这也是可能的,尽管不必要地冗长:
self.$mean[index].TotalCarries
MealCardView
需要对值进行绑定,因此您需要将绑定传递给数组元素

您可以通过迭代数组的索引来实现这一点,然后使用数组下标的投影值(它是一个绑定)到元素

首先,我建议您遵守Swift命名约定,将类型改为大写,属性/变量改为大写:

struct Meal: Identifiable {
    var id = UUID()
    var name : String
    var time : String
    var totalCalories : Int
    var image : String
}
此外,您可以只传递整个
mein
变量,而不是逐个传递属性

struct MealCardView: View {
   @Binding var meal: Meal
   // ...
}

struct DailyLogView: View {
   @State var meals: [Meal]

   var body: some View {
      
      ForEach(meals.indices, id: \.self) { index in
         MealCardView(meal: self.$meals[index])
      }

   }
}

当然,如果您坚持一个接一个地传递属性,这也是可能的,尽管不必要地冗长:
self.$mean[index].TotalCarries
MealCardView
要求绑定到一个值,但您直接传递的是一个值。另外,我强烈建议您保持语言约定和大写的名称类型,例如,
struct-fine{…}
和变量/属性camelCased:
var-fines:[fine]
如何在此ForEach中传递MealCardView绑定?
MealCardView
需要绑定到一个值,但您直接传递的是一个值。另外,我强烈建议您保持语言约定和名称类型大写,例如,
struct-fine{…}
和变量/属性camelCased:
var-fines:[fine]
如何在此ForEach中传递MealCardView绑定?