Objective c 在Swift中对选定的行进行IndExpath排序

Objective c 在Swift中对选定的行进行IndExpath排序,objective-c,swift,tableview,Objective C,Swift,Tableview,调用tableView.IndExpathForSelectedRows()时,它将返回一个AnyObject类型的数组,其中按用户选择行的顺序选择行的IndExpath 我想要的是对indexpath进行排序,以获得升序。在Swift之前,可以通过以下方式实现: NSArray *sortedIndexPaths = [[tableView indexPathsforSelectedRows] sortedArrayUsingSelector:@selector(compare:)]; 但我

调用tableView.IndExpathForSelectedRows()时,它将返回一个AnyObject类型的数组,其中按用户选择行的顺序选择行的IndExpath

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

NSArray *sortedIndexPaths = [[tableView indexPathsforSelectedRows]
sortedArrayUsingSelector:@selector(compare:)];
但我尝试用Swift实现它,但它不起作用:S

有人知道怎么处理吗


提前谢谢

我目前使用的是Windows 7,所以无法进行测试,但这正是我所期望的工作。它可能需要类型注释

let paths = tableView.indexPathsforSelectedRows()
let sorted = paths.sortedArrayUsingSelector("compare:")

对存储在路径中的NSIndexPath对象数组进行排序是一段简单的代码。 诀窍在于对[nsindepath]进行强制转换。现在可以对数组进行排序

let paths = tableView.indexPathsForSelectedRows() as [NSIndexPath]
let sortedArray = paths.sorted {$0.row < $1.row}

您可以重载
运算符,然后对其调用sort

在全球范围内对其进行定义

func <(left: NSIndexPath, right: NSIndexPath) -> Bool {
    return left.section < right.section || left.row < right.row
}
func Bool{
返回left.section
那么你就可以这样做了

let sortedIndexPaths = tableView.indexPathsForSelectedRows?.sort(<)

让sortedIndexPaths=tableView.indexPathsForSelectedRows?.sort(这里是sort indexPathsForSelectedRows swift 4代码

    if var selection = tableView.indexPathsForSelectedRows
    {
       selection = selection.sorted{ $1.compare($0) == .orderedAscending }

    }

如果您有任何问题,请与我联系。

否,它不起作用。我以前尝试过此方法,但没有成功。.错误:[AnyObject]?没有名为“sortedArrayUsingSelector”的成员,这是因为路径是可选的,请参阅Allen Zeng的回答:使用guard语句。您不需要强制转换。IndexPath实现了类似的协议,因此您只需:
tableView.indexPathsForSelectedRows.sorted()
。是的,注意:答案是6年前发布的Swift 1.0
let sortedIndexPaths = tableView.indexPathsForSelectedRows?.sort(<)
guard let sortedIndexPaths = tableView.indexPathsForSelectedRows?.sort(<) else {
    return
}
    if var selection = tableView.indexPathsForSelectedRows
    {
       selection = selection.sorted{ $1.compare($0) == .orderedAscending }

    }