在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绑定?