Swift - 结构为空时 ForEach 语句出现问题

Swift - Problem with ForEach statement while structure is empty

我有一个 forEach 语句,它通过包含膳食条目的结构进行文盲。如果结构为空,我想显示替代文本。

我的问题是当数组为空时,我在编译时收到以下错误

Cannot convert value of type 'String' to expected argument type 'Meal'

  let mealEntrysDinner: [String] = [
        
    ]



 Section(header:Text("Dinner")){
               ForEach(mealEntrysDinner, id: \.self){ meal in
                   if(mealEntrysDinner.isEmpty == true){
                       Text("Arr Empty")
                   }
                   else{
                       EntryRow(meal:meal)
                   }
                  
               }
                
            }

膳食结构如下:

struct Meal: Identifiable, Hashable{
    var id = UUID()
    var mealName: String
    var calories: String
    var quantity: Int
    var amount: String
    var protein:  String
}

条目行

struct EntryRow: View {
    var meal: Meal
    var body: some View {
        HStack{
                        VStack(alignment: .leading){
                            Text(meal.mealName)
                            Text(meal.amount)
                                .font(.subheadline)
                                .foregroundColor(.gray)
                           
                        }
                        Spacer()
                        Text(meal.calories)
                }
            }
        }

有两个问题。

首先,您似乎希望 mealEntrysDinner[Meal],而不是 [String] -- 否则,正如您所发现的,类型不匹配,您可以不要使用 EntryRow.

其次,您的 if 子句有一些 out-of-order -- 它应该 之外 ForEach:

Section(header:Text("Dinner")){
    if mealEntrysDinner.isEmpty {
        Text("Arr Empty")
    } else {
        ForEach(mealEntrysDinner) { meal in
            EntryRow(meal:meal)
        }
    }
}

这样,ForEach 只有在 mealEntrysDinner 有元素时才会显示。