如何使用sortDescriptors在Swift中对NSTableView进行排序?

时间:2014-07-07 04:08:19

标签: cocoa sorting swift nstableview

我在使用Swift编写的Cocoa应用程序中使用基于视图的NSTableView,并希望在两个表列上实现排序功能。但是,在Objective-C中,您可以通过首先在Attribute Inspector中设置“Sort Key”,然后实现名为tableView: sortDescriptorsDidChange:的数据源委托方法来实现它。

但是,此方法将sortDescriptor作为参数,并允许开发人员在方法中使用它,如下所示:

- (void) tableView:( NSTableView *) tableView sortDescriptorsDidChange:( NSArray *) oldDescriptors { 
    [self.songs sortUsingDescriptors:tableView.sortDescriptors]; 
    [tableView reloadData]; 
}

但是,在Swift数组中,没有sortUsingDescriptors这样的方法。所以我首先尝试将Array转换为NSMutableArray以使用NSMutableArray的方法,但由于我的Swift数组定义为AnyObject[],因此无法将其转换为NSMutableArray sort

那么我应该如何在Swift中的表视图中实现排序功能呢?我知道Swift数组可以使用sortDescriptors函数通过比较两个参数并返回bool值来对对象进行排序,但是是否可以使用sortDescriptors对表进行排序?或者我应该忽略sortDescriptors参数,而是手动编写我自己的排序逻辑? (但后来我不知道在没有{{1}}值的情况下如何判断单击了哪个列。)

1 个答案:

答案 0 :(得分:1)

至少现在最好的方法可能是首先将其转换为NSMutableArray,然后使用NSMutableArray的{​​{1}}方法对其进行排序,最后将其转换回原始数组,如下:

sortUsingDescriptors

顺便说一下,func tableView(tableView: NSTableView!, sortDescriptorsDidChange oldDescriptors: [AnyObject]) { var songsAsMutableArray = NSMutableArray(array: songs) songsAsNSMutableArray.sortUsingDescriptors(tableView.sortDescriptors) songs = songsAsNSMutableArray tableView.reloadData() } 会导致错误:var songsAsMutableArray = songs as NSMutableArray,因此我创建了一个NSArray is not a subtype of NSMutableArray实例,如上所示。