Swift 为什么排序(按:)在MutableCollection的扩展中不可用?

Swift 为什么排序(按:)在MutableCollection的扩展中不可用?,swift,protocols,extension-methods,Swift,Protocols,Extension Methods,我正在尝试为MutableCollection编写一个扩展,该扩展需要使用sort(by:)方法进行排序,但是它似乎对MutableCollection扩展不可用,尽管该方法是为MutableCollection定义的(至少根据苹果开发者文档) 下面是一个非常做作和简化的示例: struct MyType { var priority:Int } extension MutableCollection where Element == MyType { mutating func sor

我正在尝试为
MutableCollection
编写一个扩展,该扩展需要使用
sort(by:)
方法进行排序,但是它似乎对
MutableCollection
扩展不可用,尽管该方法是为
MutableCollection
定义的(至少根据苹果开发者文档)

下面是一个非常做作和简化的示例:

struct MyType { var priority:Int }
extension MutableCollection where Element == MyType {
    mutating func sort() { self.sort(by: { $0.priority > $1.priority }) }
}
但这会导致传递给调用的错误
参数不带参数,这是因为此时看到了我自己的
sort()
方法,似乎根本没有意识到
sort(by:)

如果我将扩展改为用于
Array
,那么扩展工作得很好,但是它当然是特定于类型的,而不是应用于符合
MutableCollection
的所有类型,这正是我真正想要的(为了尽可能通用)


为什么我现在无法查看和使用
排序(by:)
方法,有什么方法可以解决这个问题吗?

文档有点误导。为了进行适当排序,集合还必须是
RandomAccessCollection

struct MyType { var priority:Int }
extension MutableCollection where Self: RandomAccessCollection, Element == MyType {
    mutating func sort() { self.sort(by: { $0.priority > $1.priority }) }
}

文档有点误导。为了进行适当排序,集合还必须是
RandomAccessCollection

struct MyType { var priority:Int }
extension MutableCollection where Self: RandomAccessCollection, Element == MyType {
    mutating func sort() { self.sort(by: { $0.priority > $1.priority }) }
}

尝试
sorted
而不是
sort
。这就是你需要的吗?尝试
sorted
而不是
sort
。这就是你需要的吗?啊哈!你是怎么发现的,它需要深入研究源代码吗?文档似乎迫切需要包括对这些方法的约束,因为我确信我将运行I在某一点上我遇到了类似的问题。是的;我一直都在寻找源代码,以了解事情到底是如何工作的。啊哈!你是如何发现这一点的,它需要深入研究源代码吗?似乎文档迫切需要包括对类似方法的约束,因为我相信我会在某一点上遇到类似的问题。是的;我一直到源头去弄清楚事情到底是如何运作的。