如何在Swift UI中获取过滤列表的索引?

时间:2020-04-13 09:28:05

标签: ios swift swiftui

我有一个搜索栏和一个显示字符串列表的过滤数组列表。搜索栏可以很好地工作,并使用搜索文本中包含的内容更新列表。

数组:

let array = ["Student 1", "Student 2", "Student 3", "Student 5","Student 6","Student 7"]

以下是列表:

List {
   ForEach(array.filter{$0.localizedCaseInsensitiveContains(searchText) || searchText == ""}, id:\.self) { student in

      NavigationLink(destination: StudentSummary()){
         Text(student)

      }
   }
}

如果用户点击列表中的某个项目,我希望能够将所选列表项的文本存储到变量中,并获取在其中找到该列表项的数组的索引。 / p>

我找不到跟踪点击哪个导航链接的方法。我尝试将student存储到一个变量中并显示它,当我打印该变量时,它始终显示列表中的最后一项。我感觉导航链接导致了此问题,但不确定。

1 个答案:

答案 0 :(得分:0)

怎么样这样的测试代码:

struct ContentView: View {
let array = ["Student 1", "Student 2", "Student 3", "Student 5","Student 6","Student 7"]
@State var searchText = ""

var body: some View {
    NavigationView {
        List {
            ForEach(array.filter{$0.localizedCaseInsensitiveContains(searchText) || searchText == ""}, id:\.self) { student in
                NavigationLink(destination: Text(self.getIndexOf(student))) {
                    Text(student)
                }
            }
        }
    }
}

func getIndexOf(_ student: String) -> String {
    if let ndx = array.firstIndex(of: student) {
        return String(ndx) // or an Int if you prefer
    } else {
        return ""  // or -1
    }
}
}