#swift #swiftui
Вопрос:
Я сортирую данные с помощью новой замечательной таблицы в SwiftUI 3.0. Однако мне нужно сделать гораздо больше фильтрации данных, прежде чем возвращать их.
Вот что у меня есть (конкретный вопрос находится в .Закрытие обмена)
@State private var sorting = [KeyPathComparator(Variant.id)] ...other stuff Table(displayvariants, selection: $selection, sortOrder: $sorting) { TableColumn("Variant ID", value: .id) { Text("($0.id)") } TableColumn("Chromosome", value: .id) { Text("($0.chromosome)") } TableColumn("Read Depth", value: .read_depth) { Text("($0.read_depth)") } TableColumn("Ref Allele", value: .reference_allele!) TableColumn("Var Allele", value: .variant_allele!) } .onChange(of: sorting) { displayvariants.sort(using: $0) }
Вот что я хотел бы иметь (см. Изменение в закрытии .onChange)
@State private var sorting = [KeyPathComparator(Variant.id)] ..... important stuff Table(displayvariants, selection: $selection, sortOrder: $sorting) { TableColumn("Variant ID", value: .id) { Text("($0.id)") } TableColumn("Chromosome", value: .id) { Text("($0.chromosome)") } TableColumn("Read Depth", value: .read_depth) { Text("($0.read_depth)") } TableColumn("Ref Allele", value: .reference_allele!) TableColumn("Var Allele", value: .variant_allele!) } .onChange(of: sorting) { displayvariants = complexSortAndFilterFunction(KeyPathComparator: sortDescription) }
Возможно ли это вообще? Если мне понадобится изменить свой подход, я был бы рад услышать об этом.
Комментарии:
1. Ты просто имеешь в виду вот так?
func complexSortAndFilterFunction(comparator: KeyPathComparatorlt;Variantgt;)
?2. Спасибо! Когда я нахожусь в функции, мне нужно сделать несколько запросов основных данных. Есть ли способ использовать описание сортировки в качестве NSSortDescriptor?
3. Я не уверен, что это за описание. Вы никогда не определяете его в коде, который вы включили.
4. Верно. Сущность является «Вариантом», и я хочу отсортировать свойство «ref_id» в порядке возрастания. Для основных данных это будет NSSortDescriptor(ключ: «ref_id», по возрастанию: true). Как я могу преобразовать информацию, содержащуюся в описании сортировки, в этот тип запроса?
Ответ №1:
вы могли бы сделать что-то простое, как это:
Table(displayvariants, selection: $selection , sortOrder: $sorting) { TableColumn("Variant ID", value: .id) { Text("($0.id)") } TableColumn("Chromosome", value: .id) { Text("($0.chromosome)") } TableColumn("Read Depth", value: .read_depth) { Text("($0.read_depth)") } TableColumn("Ref Allele", value: .reference_allele!) TableColumn("Var Allele", value: .variant_allele!) } .onChange(of: sorting) { sortDescription in // lt;--- here displayvariants = complexSortAndFilterFunction(KeyPathComparator: sortDescription) } func complexSortAndFilterFunction(KeyPathComparator: [KeyPathComparatorlt;Variantgt;]) -gt; [Variant] { // ... do a lot more filtering on the data before returning it return [Variant] // lt;-- return the results }