当您调用tableView.indexPathsForSelectedRows()时,它将返回AnyObject类型的数组,其中indexPaths是按用户选择它们的顺序选择的。
我想要的是对indexPaths进行排序以获得升序。在Swift之前,可以通过以下方式实现:
NSArray *sortedIndexPaths = [[tableView indexPathsforSelectedRows]
sortedArrayUsingSelector:@selector(compare:)];
但是我试图用Swift实现它并且它不起作用:S
任何人都知道如何处理这个问题?
提前致谢!
答案 0 :(得分:3)
它是对存储在路径变量中的NSIndexPath对象数组进行排序的简单代码。 诀窍在于转向 [NSIndexPath] 。现在您可以对数组进行排序。
let paths = tableView.indexPathsForSelectedRows() as [NSIndexPath]
let sortedArray = paths.sorted {$0.row < $1.row}
OR 如果您希望具有以下功能:
func compare (obj0: NSIndexPath, obj1: NSIndexPath) -> Bool {
return obj0.row < obj1.row
}
然后
let sortedArray = paths.sorted { compare($0, $1) }
答案 1 :(得分:2)
我现在在Windows 7上,所以我无法测试,但这是我期望的工作。它可能需要一个类型注释。
let paths = tableView.indexPathsforSelectedRows()
let sorted = paths.sortedArrayUsingSelector("compare:")
答案 2 :(得分:1)
您可以重载<
和>
运算符,然后只需对其进行排序。
全球定义
func <(left: NSIndexPath, right: NSIndexPath) -> Bool {
return left.section < right.section || left.row < right.row
}
然后你可以这样做升序
let sortedIndexPaths = tableView.indexPathsForSelectedRows?.sort(<)
显然因为它返回一个可选项,你会以某种方式防范它,例如
guard let sortedIndexPaths = tableView.indexPathsForSelectedRows?.sort(<) else {
return
}
答案 3 :(得分:0)
这里是sort indexPathsForSelectedRows快速4代码。
if var selection = tableView.indexPathsForSelectedRows
{
selection = selection.sorted{ $1.compare($0) == .orderedAscending }
}
如果您有任何问题可以ping通我。