我有从核心数据填充的此列表:
List {
ForEach(items.filter {
self.searchText.isEmpty ? true : $0.term!.contains(self.searchText)
}, id: \.self) { item in
Button(action: {
selectedItem = items.firstIndex { $0 == item }!
changeDescription()
print(selectedItem)
}) {
Text(item.term!)
.font(fontItems)
.disabled(true)
.foregroundColor(items[selectedItem] == item ? .black : .white)
}
最后一行
.foregroundColor(items[selectedItem] == item ? .black : .white)
是我尝试检测是否单击了该按钮的尝试。在这种情况下,我想将字体颜色更改为黑色。
当我尝试滚动显示以下消息时,该应用程序在该行崩溃:
__boundsFail: index 18446744073709551615 beyond bounds [0 .. 605]'
我是SwiftUI的新手。
我该怎么做?
答案 0 :(得分:1)
直接存储item
(只是将其类型设置为Equatable)而不是存储索引(在完整数组和过滤后的数组中有所不同),即
Button(action: {
selectedItem = item // << store item in selection
changeDescription()
print(selectedItem)
}) {
Text(item.term!)
.font(fontItems)
.disabled(true)
.foregroundColor(selectedItem == item ? .black : .white) // compare item
}