Ios 组合文本视图中带有ontapsirture的多个Bool

Ios 组合文本视图中带有ontapsirture的多个Bool,ios,swift,textview,swiftui,Ios,Swift,Textview,Swiftui,我们可以使用map和reduce函数创建组合文本视图(而不是逐行) struct ContentView: View { @State private var boolArr = [false, false, true, true, false] var body: some View { (0...boolArr.count).map { Text("\($0)") }.reduce(Text(""), +)

我们可以使用map和reduce函数创建组合文本视图(而不是逐行)

struct ContentView: View {
@State private var boolArr = [false, false, true, true, false]

   var body: some View {
      (0...boolArr.count).map {
                Text("\($0)")
                }.reduce(Text(""), +)
   }
} 
如果我们点击文本而不是所有文本,我想在特定文本下划线。例如,如果我点击文本“1”,它会在它下面加下划线。如果我再次点击,它将删除下划线。并非所有文本都加下划线并删除所有下划线,只有我点击的特定文本。以下方法显示我无法
将“Int”类型的值转换为预期的参数类型“WritableKeyPath”


为什么$0不起作用?那么,哪种方法有效呢?

这是我给你的解决方案。希望能有帮助

struct ContentView: View {
    @State private var boolArr = [false, false, true, true, false]

    var body: some View {
        HStack() {
            ForEach([1,2,3,4,5], id: \.self) { number  in
                Text("\(number)")
                    .underline(self.boolArr[number - 1])
                    .onTapGesture(count: 1) {
                        self.boolArr[number - 1].toggle()
                }
            }
        }
    }
}

这是我给你的解决方案。希望能有帮助

struct ContentView: View {
    @State private var boolArr = [false, false, true, true, false]

    var body: some View {
        HStack() {
            ForEach([1,2,3,4,5], id: \.self) { number  in
                Text("\(number)")
                    .underline(self.boolArr[number - 1])
                    .onTapGesture(count: 1) {
                        self.boolArr[number - 1].toggle()
                }
            }
        }
    }
}

您的.ontapsignature将位于一个文本->简化文本(这只是一个UI组件),其中的内容可能是“12345”。那它怎么知道你敲了哪个字母呢?您的“示例”无论如何都会崩溃,因为索引超出了范围,因为数组将以索引0开头。您的.ontapsignature将位于一个文本->精简文本(这只是一个UI组件),其中的内容可能是“12345”。那它怎么知道你敲了哪个字母呢?您的“示例”无论如何都会崩溃,因为索引超出了范围,因为数组将以索引0开头。