我能够使用 选择某一行项onTapGesture
,如果再次点击则取消选择。
问题是为什么下面的代码可以运行,而最后显示的代码却不运行?
@Binding var selectedRow: RowItem?
var body: some View {
ForEach(modelData.rows) { row in
LazyVGrid(columns: columns) {
Text("text")
Text("text")
}
.onTapGesture {
if (selectedRow?.id == row.id) {
selectedRow = nil
} else {
selectedRow = row
}
}
}
}
其中modelData.rows
是[RowItem]
,且 RowItem 是:struct RowItem: Identifiable
并且具有定义的相等函数:
static func == (lhs: RowItem, rhs: RowItem) -> Bool {
rhs.id == lhs.id
}
为什么必须id
使用,而下面的却不起作用?
.onTapGesture {
if (selectedRow? == row) {
selectedRow = nil
} else {
selectedRow = row
}
}
(失败原因:)
编译器无法在合理的时间内对此表达式进行类型检查;请尝试将表达式分解为不同的子表达式