有没有办法将 Swift/SwiftUI 中的 KeyPathComparator 传递给另一个函数?

Is there a way to pass a KeyPathComparator in Swift/SwiftUI into another function?

我正在使用 SwiftUI 3.0 中新的漂亮 Table 进行排序。但是,我需要在返回数据之前对数据进行更多过滤。

这是我的(具体问题在 .onChange 闭包中)

@State private var sorting = [KeyPathComparator(\Variant.id)]

...other stuff

            Table(displayvariants, selection: $selection, sortOrder: $sorting) {
                TableColumn("Variant ID", value: \.id) {
                    Text("\([=11=].id)")
                }
                TableColumn("Chromosome", value: \.id) {
                    Text("\([=11=].chromosome)")
                }
                TableColumn("Read Depth", value: \.read_depth) {
                    Text("\([=11=].read_depth)")
                }
                TableColumn("Ref Allele", value: \.reference_allele!)
                TableColumn("Var Allele", value: \.variant_allele!)
            }
            .onChange(of: sorting) {
                displayvariants.sort(using: [=11=])
            }

这是我想要的(请参阅 .onChange 闭包中的更改)

@State private var sorting = [KeyPathComparator(\Variant.id)]

..... important stuff

            Table(displayvariants, selection: $selection, sortOrder: $sorting) {
                TableColumn("Variant ID", value: \.id) {
                    Text("\([=12=].id)")
                }
                TableColumn("Chromosome", value: \.id) {
                    Text("\([=12=].chromosome)")
                }
                TableColumn("Read Depth", value: \.read_depth) {
                    Text("\([=12=].read_depth)")
                }
                TableColumn("Ref Allele", value: \.reference_allele!)
                TableColumn("Var Allele", value: \.variant_allele!)
            }
            .onChange(of: sorting) {
                displayvariants = complexSortAndFilterFunction(KeyPathComparator: sortDescription)
            }

这可能吗?如果我需要改变我的方法,我很乐意听到。

你可以像这样做一些简单的事情:

Table(displayvariants, selection: $selection , sortOrder: $sorting) {
    TableColumn("Variant ID", value: \.id) {
        Text("\([=10=].id)")
    }
    TableColumn("Chromosome", value: \.id) {
        Text("\([=10=].chromosome)")
    }
    TableColumn("Read Depth", value: \.read_depth) {
        Text("\([=10=].read_depth)")
    }
    TableColumn("Ref Allele", value: \.reference_allele!)
    TableColumn("Var Allele", value: \.variant_allele!)
}
.onChange(of: sorting) { sortDescription in   // <--- here
      displayvariants = complexSortAndFilterFunction(KeyPathComparator: sortDescription)
}



func complexSortAndFilterFunction(KeyPathComparator: [KeyPathComparator<Variant>]) -> [Variant] {
     // ... do a lot more filtering on the data before returning it
     return [Variant]  // <-- return the results
}