【发布时间】: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 ..< recentRooms.count)不应与动态内容一起使用。请改用ForEach(recentRooms, id: \.self)。 -
@Asperi,这是一个非常简单的 VStack,我看不出分解它有什么好处。该错误似乎具有误导性。
-
编译器对 simple VStack 的 simplicity 有“不同的想法”))
-
@pawello2222,实际上它解决了这个问题!更改代码时出现了我的错误。请将此添加为答案。