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

Sup*_*oob 7 strikethrough swiftui swiftui-foreach

我正在尝试对 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.
                            })
                }
            }
        }
    }
    
}
Run Code Online (Sandbox Code Playgroud)

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

Asp*_*eri 11

如果你需要它持久化,那么你绝对应该将它放入模型中。否则,@State仅适用于运行时,您可以在子视图中执行此操作,例如

ForEach(list.items) { item in
    RowView(item: item)
}
Run Code Online (Sandbox Code Playgroud)

和行视图:

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()
        })
  }
}
Run Code Online (Sandbox Code Playgroud)