如何在SwiftUI中将striketthrough()应用于点击的foreach Text项



我正在尝试对ForEach循环中的任何点击的Text项应用删除线:

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来应用条件,以跟踪何时应用striketthrough((?我认为唯一的方法是将一个属性放入listObject中,以跟踪它是否被删除,然后使用它将true/false应用于striketthrough((修饰符。但这看起来像意大利面条代码?

如果您需要它的持久性,那么您肯定应该将它放入模型中。否则,@State仅用于运行时,您可以在子视图中执行,如

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

和RowView:

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()
})
}
}

最新更新