无法编译 SwiftUI ForEach 表

Posted

技术标签:

【中文标题】无法编译 SwiftUI ForEach 表【英文标题】:Cannot compile SwiftUI ForEach Table 【发布时间】:2020-06-05 17:37:58 【问题描述】:

我正在尝试从动态数组创建表格视图,但编译器无法构建它并出现不相关的错误: 编译器无法在合理的时间内对该表达式进行类型检查;尝试将表达式分解为不同的子表达式

struct RecentView: View 
    @State var recentRooms: [[String: String]] = []

    @Binding var recentIsPressed: Bool
    @Binding var nextIsPressed: Bool
    @Binding var conferenceName: String

    let screenWidth = UIScreen.main.bounds.size.width

    var body: some View 
        if let recent = UserDefaults.standard.array(forKey: "recentRooms") as? [[String: String]] 
            recentRooms = recent
        

        return VStack 

            ...

            VStack(alignment: .leading) 
                ForEach(0 ..< recentRooms.count)  i in
                    Button(action:  self.meetingSelected(name: self.recentRooms[i]["name"] ?? "") ) 
                        HStack 
                            ZStack 
                                Circle()
                                    .foregroundColor(Color("ProjectBlue"))
                                    .frame(width: 76, height: 76)
                                Text(self.recentRooms[i]["short_name"] ?? "")
                                    .font(.custom("Roboto-Bold", size: 36))
                                    .foregroundColor(Color("AlmostWhite"))
                            
                            VStack(alignment: .leading) 
                                Text(self.recentRooms[i]["name"] ?? "")
                                    .font(.custom("OpenSans-Bold", size: 17))
                                    .foregroundColor(Color("AlmostWhite"))
                                Text(self.recentRooms[i]["date"] ?? "")
                                    .font(.custom("OpenSans-Regular", size: 17))
                                    .foregroundColor(Color("AlmostWhite"))
                                Text(self.recentRooms[i]["duration"] ?? "")
                                    .font(.custom("OpenSans-Regular", size: 17))
                                    .foregroundColor(Color("AlmostWhite"))
                            
                        
                    
                    .frame(width: self.screenWidth, alignment: .leading)
                    .padding(.leading, 20)
                
            
        
    

    private func meetingSelected(name: String) 
        conferenceName = name
        nextIsPressed = true
        recentIsPressed = false
    

对于 ForEach 部分有什么问题有什么建议吗?

【问题讨论】:

那么,你为什么不按照编译器的要求去做呢?顺便说一句,这是非常合理的建议。 ForEach(0 ..&lt; recentRooms.count) 不应与动态内容一起使用。请改用ForEach(recentRooms, id: \.self) @Asperi,这是一个非常简单的 VStack,我看不出分解它有什么好处。该错误似乎具有误导性。 编译器对 simple VStacksimplicity 有“不同的想法”)) @pawello2222,实际上它解决了这个问题!更改代码时出现了我的错误。请将此添加为答案。 【参考方案1】:

ForEach 的这种变体不应与动态内容一起使用。

ForEach(0 ..< recentRooms.count)

如果可以更改 recentRooms 变量,请改用它:

ForEach(recentRooms, id: \.self)

【讨论】:

以上是关于无法编译 SwiftUI ForEach 表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 的 ForEach 循环中增加状态?

无法在 SwiftUI 中使用 ForEach 和 CoreData 将数据正确传递给模态演示

视图模型数组上的 ForEach 循环问题导致 Xcode 编译错误 - SwiftUI

SwiftUI 自定义 List 不能在 ForEach 中使用 Binding

从 ForEach 中引用变量时,SwiftUI“无法推断通用参数'数据'”

在 ForEach/ZStack (SwiftUI) 中将表达式分解为不同的子表达式