Я хотел бы реализовать «наивный» вид в быстром. Я делаю так:Функции и генерические средства
extension Array {
func sort<Element: Comparable>(isOrderedBefore: (Element, Element) -> Bool) -> [Element] {
var sortedArray : [Element] = []
for x in self {
for (index, value) in sortedArray.enumerate() {
if isOrderedBefore(x, value) {
}
}
}
return sortedArray
}
}
У меня есть ошибки компиляции: «не может ссылаться на isOrderedBefore со списком аргументов«(элемент, элемент)
Если удалить Comparable протокол, код компилируется, но я . не может реализовать функцию сортировки без элементов, входящих массивов были сопоставимы
Этот код компилируется:
extension Array {
func sort(isOrderedBefore: (Element, Element) -> Bool) -> [Element] {
var sortedArray : [Element] = []
for x in self {
for (index, value) in sortedArray.enumerate() {
if isOrderedBefore(x, value) {
}
}
}
return sortedArray
}
}
Что я делаю неправильно?
Почему вы думаете, что вы * не можете реализовать функцию сортировки без Элементы массива сопоставимы *? Поскольку вы предоставляете пользователю возможность предоставить пользовательскую функцию сравнения, нет необходимости указывать, что общий тип должен быть сопоставим. – luk2302
Расширение Массив где Элемент: Сопоставимый {... –
@ luk2302 Вы правы, нет необходимости соответствовать протоколу Comparable. – samir