Xcode 8 베타를 사용하면 두 번째 확장명을 컴파일 할 수 없습니다. 이것이 신속한 버그인지 알려진 제한인지 이해할 수 없습니다.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 '(_, _) -> _'
}
}
(요소, T) -> T는 실제로 함수 유형입니다. 그래서 내가 컴파일러 (,)을 기대하는 이유를 이해할 수 없다 - __ >와
각 호출마다 전체 배열을 복사하므로'O (n^2)'의 시간 복잡도로 이어지기 때문에 여기서 재귀를 사용하지 않는 것이 좋습니다. 당신은'for'-loop를 사용하는 것보다 낫습니다. –