我在使用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}}值的情况下如何判断单击了哪个列。)
答案 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
实例,如上所示。