0

我正在尝试根据付款状态将 swipeAction 从“Paid”更改为“UnPaid”,但不知何故似乎失败了。错误:“编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式”

感谢任何帮助

struct ContentView: View {

var data: [Data] = [data1, data2, data3, data4] 
@State var swipeLabel = true

var body: some View {
    let grouped = groupByDate(data)
    List {
        ForEach(Array(grouped.keys).sorted(by: >), id: \.self) { date in 
            let studentsDateWise = grouped[date]!
            Section(header:Text(date, style: .date)) {
                ForEach(studentsDateWise, id:\.self) { item in 
                    HStack {    
                        Text(item.name)
                        padding()
                        Text(item.date, style: .time)
                        if(item.paymentStatus == false) {
                            Image(systemName: "person.fill.questionmark")
                                .foregroundColor(Color.red)
                            
                        } else {
                            Image(systemName: "banknote")
                                .foregroundColor(Color.green)
                        }
                    } // HStack ends here
                    .swipeActions() {
                        if(item.paymentStatus) {
                            Button("Paid"){}
                        } else {
                            Button("UnPaid"){}
                        }
                    }
                } // ForEach ends here... 
            } // section ends here
        } // ForEach ends here
    } // List ends here
} // var ends here
}
4

1 回答 1

0

bodyfunc 不应进行任何分组或排序。您需要首先将数据准备到属性中,然后从 中的属性中读取body,例如在onAppear块中。此外,如果您Data是一个不能使用的结构,则id: \.self需要在数据上指定唯一标识符属性,或者通过具有 id 属性或从其他属性计算唯一标识符的 id getter 来id:\.myUniqueID实现协议。Indentifiable

我建议将所有这些代码分成小视图,其中的小主体只使用一个或两个属性。自下而上工作。然后最终使用一个 View 处理一组日期,另一个处理一组包含之前制作的小 View 的项目。

您可能还应该了解 if 和 foreach inbody不像普通代码,它们被转换为特殊视图。值得观看 Apple 的视频Demystify SwiftUI以了解结构身份。

于 2022-01-25T13:23:41.777 回答