Как получить индекс отфильтрованного списка в Swift UI? - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть строка поиска и список отфильтрованных массивов, который отображает список строк. Панель поиска работает отлично и обновляет список тем, что содержится в тексте поиска.

Массив:

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)

      }
   }
}

Если пользователь нажимает на элемент в списке, я хочу иметь возможность сохранить текст элемента списка, который выбран в переменную, и получить индекс массива, в котором этот элемент списка найден.

Я не могу найти способ отслеживать из которых навигационная ссылка нажата. Я пытался сохранить student в переменной и отобразить ее, и она отображала последний элемент в списке, когда я печатал эту переменную. У меня возникло ощущение, что навигационная ссылка вызывает эту проблему, но я не уверен.

1 Ответ

0 голосов
/ 13 апреля 2020

Как насчет примерно такого теста:

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
    }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...