如何将删除线()应用于 SwiftUI 中点击的 foreach 文本项?

How to apply strikethrough() to a tapped foreach Text item in SwiftUI?

我正在尝试将删除线应用于 ForEach 循环中的任何点击文本项:

struct BrandListView: View {
    @ObservedObject var list: ListObject
                                
    var body: some View {
        ScrollView {
            VStack {
                ForEach(list.items) { items in
                        Text(item.name)
                            .strikethrough(//?)
                            .onTapGesture(perform: {
                                // on tap, apply strikethrough only to this item.
                            })
                }
            }
        }
    }
    
}

是否有一种简单的方法可以使用@State var 来应用条件,以跟踪何时应用删除线()或不应用?我在想唯一的方法是将 属性 放入跟踪它是否被击中的 listObject 中,然后使用它来将 true/false 应用于 strikethrough() 修饰符。但这似乎像意大利面条代码?

如果你需要它持久化,那么你绝对应该把它放到模型中。否则,@State 仅适用于 run-time,你可以在子视图中进行,如

ForEach(list.items) { item in
    RowView(item: item)
}

和行视图:

struct RowView: View {
  let item: Your_Item_Type

  @State private var stroken = false

  var body: some View {
    Text(item.name)
        .strikethrough(stroken)
        .onTapGesture(perform: {
            self.stroken.toggle()
        })
  }
}