Har*_*ikk 2 extension-methods protocols swift
我正在尝试编写一个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 }) }
}
Run Code Online (Sandbox Code Playgroud)
但这会导致错误Argument passed to call that takes no arguments,这是因为我自己的sort()方法此时被看到,似乎sort(by:)根本没有意识到。
如果我将扩展更改为 for 那么Array扩展就可以正常工作,但是当然它是特定于类型的,而不是应用于符合的所有类型MutableCollection,这就是我真正的意图(为了与可能的)。
sort(by:)为什么我此时无法查看和使用该方法,有什么方法可以解决这个问题吗?
该文档有点误导。为了就地排序,集合还必须是RandomAccessCollection:
struct MyType { var priority:Int }
extension MutableCollection where Self: RandomAccessCollection, Element == MyType {
mutating func sort() { self.sort(by: { $0.priority > $1.priority }) }
}
Run Code Online (Sandbox Code Playgroud)