Swift 我如何知道列表中单击了某个特定按钮

Swift 我如何知道列表中单击了某个特定按钮,swift,swiftui,Swift,Swiftui,我有这个列表,由核心数据填充: List { ForEach(items.filter { self.searchText.isEmpty ? true : $0.term!.contains(self.searchText) }, id: \.self) { item in Button(action: { selectedItem = items.firstIndex { $0 == ite

我有这个列表,由核心数据填充:

    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的新手

如何做到这一点?

不存储索引(在完整数组和过滤数组中有所不同),而是直接存储
(只需使其类型相等),即

按钮(操作:{

selectedItem=item//Brilliant!像这样容易多了。我无法给你足够的票数!!!!!!!!!!!!!
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
}