我尝试组合来自以下类型的两个对象
@ObservedObject var expenses = Expense()
@ObservedObject var recipes = Recipe()数组工作得很好,一切都很好。
现在,我想在ForEach中表示数组中的所有项。
var body: some View {
TabView {
NavigationView {
List {
ForEach(Array(zip(expenses.items, recipes.ReItems)),id: \.0){ item in
HStack{
VStack(alignment: .leading){
Text(item.beschreibung)
.font(.headline)
Text(String(item.menge) + " \(item.unitType)")
}
}
}
.onDelete(perform: removeItems)
}但是这会抛出一个错误--“编译器无法在合理的时间内对该表达式进行类型检查;请尝试将该表达式分解为不同的子表达式”。
我的第一个想法是将数组保存在一个变量中,如下面的stackoverflow post The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions中所示
@State private var arrayExpense = self.expenses.items
@State private var arrayRecipes = self.recipes.ReItems但是最有趣的是,这看起来并不好..它还抛出异常;o
谢谢你的帮忙!
发布于 2020-04-12 18:11:06
尝试将其拆分,如下所示(这将显式地给出编译器的zip类型检查结果)
var body: some View {
TabView {
NavigationView {
List {
self.listContent(items: Array(zip(expenses.items, recipes.ReItems)))
}
...
private func listContent(items: [Item]) -> some View {
ForEach(items, id: \.0){ item in
HStack{
VStack(alignment: .leading){
Text(item.beschreibung)
.font(.headline)
Text(String(item.menge) + " \(item.unitType)")
}
}
}
.onDelete(perform: removeItems)
}发布于 2020-04-12 20:25:24
文本应该是:
Text(item.0.beschreibung).font(.headline)
Text(String(item.0.menge) + " \(item.0.unitType)")或者使用item.1 1作为案例。
https://stackoverflow.com/questions/61169658
复制相似问题