Почему сортировка (по :) недоступна в расширениях MutableCollection? - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь написать расширение для MutableCollection, которое должно использовать метод sort(by:) для сортировки, однако оно не доступно для MutableCollection расширений, несмотря на то, что этот метод был определен для MutableCollection (по крайней мере в соответствии с документацией Apple для разработчиков).

Вот очень надуманный и упрощенный пример:

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

Но это приводит к ошибке Argument passed to call that takes no arguments, потому что мойsort() метод рассматривается в этот момент, кажется, что вообще ничего не известно о sort(by:).

Если я изменю расширение на вместо Array, тогда расширение работает просто отлично, нотогда, конечно, он зависит от типа, а не применяется ко всем типам, соответствующим MutableCollection, что я и имел в виду (чтобы быть как можно более универсальным).

Почему я не могупосмотрите и используйте метод sort(by:) на этом этапе, и есть ли способ, которым я могу обойти это?

1 Ответ

0 голосов
/ 29 мая 2018

Документация немного вводит в заблуждение.Для сортировки по месту коллекция также должна быть RandomAccessCollection:

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