Использование Xcode 8 beta, swift 3, второе расширение не может быть скомпилировано. Я не понимаю, является ли это быстрой ошибкой или известным ограничением.Почему система типа Swift пытается преобразовать тип в неверный ожидаемый параметр
extension Array {
func scanl<T>(initial: T, combine:(Iterator.Element, T) -> T) -> [T] {
guard let first = self.first else { return [] }
return [initial] + Array(self.dropFirst()).scanl(initial: combine(first, initial), combine: combine)
}
}
extension Array {
func scanl<T>(combine: (Iterator.Element, T) -> T) -> [T] {
guard let first = self.first else { return [] }
return Array(self.dropFirst()).scanl(initial:first, combine:combine)// Cannot convert value of type '(Element, T) -> T' To expected argument type '(_, _) -> _'
}
}
(Element, T) -> T действительно является типом функции. Так я не могу понять, почему компилятор ожидать (,) -> __ и что этот тип означает, кроме «я не забочусь о типе»
Я бы отказался от использования рекурсии здесь, потому что он будет копировать весь массив каждый вызов, что приведет к сложности времени «O (n^2)». Вы лучше, просто используя 'for'-loop. –