gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:17:51 25 4
gpt4 key购买 nike

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

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

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

但是,在 Swift Array 中,没有 sortUsingDescriptors 这样的方法。所以我首先尝试将 Array 转换为 NSMutableArray 以便使用 NSMutableArray 的方法,但是由于我的 Swift Array 被定义为 AnyObject[],它不能转换为 NSMutableArray

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

最佳答案

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

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,所以我创建了一个NSMutableArray 实例如上所示。

关于cocoa - 如何使用 sortDescriptors 在 Swift 中对 NSTableView 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24602889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com