有没有办法将 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
}
我正在使用 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
}