我正在尝试使用新的 Table
来显示一些带有单列的排序数据,但是我遇到了当项目消失时它没有更新的问题。用一个简单的 List
替换它就足够奇怪了。
struct ContentView: View {
@State var data: [TestStruct] = []
var sortedData: [TestStruct] {
return data.sorted(by: { $0.text < $1.text })
}
var body: some View {
Table(sortedData) { // Swapping this with a List fixes everything
TableColumn("Text", value: \.text)
}
.toolbar {
Button(action: {
addItem(longString: false)
}) {
Text("Add Short")
}
Button(action: {
addItem(longString: true)
}) {
Text("Add Long")
}
}
}
private func addItem(longString: Bool) {
withAnimation {
data.append(TestStruct(text: longString ? "This is long so you can differentiate better" : "Short"))
}
}
}
struct TestStruct: Identifiable {
var text: String
var id = UUID()
}
是什么导致了这个问题?将 Table
替换为 List
完全解决了问题,但我想保留 Table
(以便稍后添加更多列)。
另外,有没有其他人能够重现这个问题?我已经能够使用 Xcode 13 Beta 2 在两个版本的 macOS Montery(测试版 1 和 2)上进行复制
答案 0 :(得分:0)
我可以重现这一点,对我来说,这看起来像是一个由这么多行相同引起的错误。
例如,我可以通过更改 addItem
使每个文本值唯一来完全消除此错误:
let count = data.count + 1
data.append(TestStruct(text:
longString ? "This is long so you can differentiate better \(count)" : "Short \(count)"))
要注意的另一件事是,如果您向表格添加排序,则单击排序箭头将解决问题,重复项将消失。所以这看起来是一个明显的错误,但我们仍处于早期测试阶段,所以它不会阻止我在我的 macOS 项目中使用 Table
并且这有点人为,因为有这么多行具有完全相同的值。>