为什么 sort(by:) 在 MutableCollection 的扩展中不可用?
Why is sort(by:) unavailable in extensions to MutableCollection?
我正在尝试为 MutableCollection
编写一个扩展,需要使用 sort(by:)
方法进行排序,但它似乎不适用于 MutableCollection
扩展,尽管此方法是为 MutableCollection
定义的(至少根据 Apple Developer Documentation)。
这是一个非常人为和简化的例子:
struct MyType { var priority:Int }
extension MutableCollection where Element == MyType {
mutating func sort() { self.sort(by: { [=10=].priority > .priority }) }
}
但是这样就报错了Argument passed to call that takes no arguments
,这是因为此时我自己的sort()
方法被看到了,似乎根本没有sort(by:)
的意识。
如果我将扩展名更改为 Array
,那么扩展名就可以正常工作,但当然它是特定于类型的,而不是应用于符合 MutableCollection
的所有类型,这是我真正想要的(为了尽可能通用)。
为什么此时我无法看到和使用 sort(by:)
方法,有什么方法可以解决这个问题吗?
文档有点误导。为了就地排序,集合也必须是 RandomAccessCollection
:
struct MyType { var priority:Int }
extension MutableCollection where Self: RandomAccessCollection, Element == MyType {
mutating func sort() { self.sort(by: { [=10=].priority > .priority }) }
}
我正在尝试为 MutableCollection
编写一个扩展,需要使用 sort(by:)
方法进行排序,但它似乎不适用于 MutableCollection
扩展,尽管此方法是为 MutableCollection
定义的(至少根据 Apple Developer Documentation)。
这是一个非常人为和简化的例子:
struct MyType { var priority:Int }
extension MutableCollection where Element == MyType {
mutating func sort() { self.sort(by: { [=10=].priority > .priority }) }
}
但是这样就报错了Argument passed to call that takes no arguments
,这是因为此时我自己的sort()
方法被看到了,似乎根本没有sort(by:)
的意识。
如果我将扩展名更改为 Array
,那么扩展名就可以正常工作,但当然它是特定于类型的,而不是应用于符合 MutableCollection
的所有类型,这是我真正想要的(为了尽可能通用)。
为什么此时我无法看到和使用 sort(by:)
方法,有什么方法可以解决这个问题吗?
文档有点误导。为了就地排序,集合也必须是 RandomAccessCollection
:
struct MyType { var priority:Int }
extension MutableCollection where Self: RandomAccessCollection, Element == MyType {
mutating func sort() { self.sort(by: { [=10=].priority > .priority }) }
}