如何在SwiftUI中将strikethrough应用于点击的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.
                            })
                }
            }
        }
    }
    
}

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

解决方法

如果您需要持久化,那么绝对应该将其放入模型中。否则,for仅用于运行时,您可以在子视图中进行操作,例如

@State

和RowView:

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