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
有元素时才会显示。
我有一个 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
有元素时才会显示。