在Swift中对indexPathsForSelectedRows进行排序

时间:2014-10-03 16:52:37

标签: objective-c swift tableview

当您调用tableView.indexPathsForSelectedRows()时,它将返回AnyObject类型的数组,其中indexPaths是按用户选择它们的顺序选择的。

我想要的是对indexPaths进行排序以获得升序。在Swift之前,可以通过以下方式实现:

NSArray *sortedIndexPaths = [[tableView indexPathsforSelectedRows]
sortedArrayUsingSelector:@selector(compare:)];

但是我试图用Swift实现它并且它不起作用:S

任何人都知道如何处理这个问题?

提前致谢!

4 个答案:

答案 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通我。