我有一个搜索栏和一个显示字符串列表的过滤数组列表。搜索栏可以很好地工作,并使用搜索文本中包含的内容更新列表。
数组:
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
存储到一个变量中并显示它,当我打印该变量时,它始终显示列表中的最后一项。我感觉导航链接导致了此问题,但不确定。
答案 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
}
}
}