gpt4 book ai didi

nstableview - swift 3 : Sort (formerly sort-in-place) array by sort descriptors

转载 作者:行者123 更新时间:2023-12-02 03:14:33 28 4
gpt4 key购买 nike

直到现在(Swift 2.2)我一直愉快地使用来自 this answer 的代码- 它迅速,优雅,它像梦一样工作。

extension MutableCollectionType where Index : RandomAccessIndexType, Generator.Element : AnyObject {
/// Sort `self` in-place using criteria stored in a NSSortDescriptors array
public mutating func sortInPlace(sortDescriptors theSortDescs: [NSSortDescriptor]) {
sortInPlace {
for sortDesc in theSortDescs {
switch sortDesc.compareObject($0, toObject: $1) {
case .OrderedAscending: return true
case .OrderedDescending: return false
case .OrderedSame: continue
}
}
return false
}
}
}

extension SequenceType where Generator.Element : AnyObject {
/// Return an `Array` containing the sorted elements of `source`
/// using criteria stored in a NSSortDescriptors array.
@warn_unused_result
public func sort(sortDescriptors theSortDescs: [NSSortDescriptor]) -> [Self.Generator.Element] {
return sort {
for sortDesc in theSortDescs {
switch sortDesc.compareObject($0, toObject: $1) {
case .OrderedAscending: return true
case .OrderedDescending: return false
case .OrderedSame: continue
}
}
return false
}
}
}

Swift 3 改变了一切。

使用代码迁移工具和Proposal SE- 0006 - sort() => sorted(), sortInPlace() => sort() - 我已经做到了

extension MutableCollection where Index : Strideable, Iterator.Element : AnyObject {
/// Sort `self` in-place using criteria stored in a NSSortDescriptors array
public mutating func sort(sortDescriptors theSortDescs: [SortDescriptor]) {
sort {
for sortDesc in theSortDescs {
switch sortDesc.compare($0, to: $1) {
case .orderedAscending: return true
case .orderedDescending: return false
case .orderedSame: continue
}
}
return false
}
}
}

extension Sequence where Iterator.Element : AnyObject {
/// Return an `Array` containing the sorted elements of `source`
/// using criteria stored in a NSSortDescriptors array.

public func sorted(sortDescriptors theSortDescs: [SortDescriptor]) -> [Self.Iterator.Element] {
return sorted {
for sortDesc in theSortDescs {
switch sortDesc.compare($0, to: $1) {
case .orderedAscending: return true
case .orderedDescending: return false
case .orderedSame: continue
}
}
return false
}
}
}

'sorted' 函数编译 [并工作] 没有问题。对于“排序”,我在“排序”这一行收到一条错误消息:“无法将类型‘(_, _) -> _’的值转换为预期的参数类型‘[SortDescriptor]’”,这让我感到非常困惑:我不明白编译器在哪里尝试转换任何东西,因为我传入了一个 SortDescriptors 数组,它应该是一个 SortDescriptors 数组。

通常,这种类型的错误意味着您正在处理应该具有确定值的可选值,但由于这是一个函数参数 - 并且似乎在 func sorted 中正常工作 -我只能从中读到“出了点问题”。截至目前,我不知道那是什么东西,而且由于我们处于测试版的早期阶段,因此根本没有任何文档。

作为解决方法,我从我的代码中删除了排序(以前称为就地排序)函数,并将其替换为

让 sortedArray = oldArray(sorted[...]旧数组 = 排序数组

但如果我能恢复我的就地排序功能,我将不胜感激。

最佳答案

比较 Swift 2.2 中可用的方法:

enter image description here

使用 Swift 3 中的方法:

enter image description here

请注意,Swift 3 没有接受 isOrderedBefore 闭包的 sort 方法。

这就是您的函数无法编译的原因。

这看起来像是一个错误,所以我在 bugreport.apple.com 上将其报告为错误 26857748。

关于nstableview - swift 3 : Sort (formerly sort-in-place) array by sort descriptors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37857540/

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