Как применить зачеркивание () к текстовому элементу с нажатой клавишей foreach в 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(). Но это похоже на спагетти-код?

1 ответ

Решение

Если он вам нужен настойчивый, то обязательно нужно воплотить его в модель. Иначе, @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()
        })
  }
}
Другие вопросы по тегам