Skip to content

Instantly share code, notes, and snippets.

@JadenGeller
Last active October 16, 2016 16:12
Show Gist options
  • Save JadenGeller/ca466c6ccc96a92ca5c5 to your computer and use it in GitHub Desktop.
Save JadenGeller/ca466c6ccc96a92ca5c5 to your computer and use it in GitHub Desktop.
Reduce1
#if swift(>=3.0)
extension Sequence {
func reduce(combine: @noescape (Iterator.Element, Iterator.Element) throws -> Iterator.Element) rethrows -> Iterator.Element? {
var iterator = makeIterator()
guard var result = iterator.next() else { return nil }
while let element = iterator.next() {
result = try combine(result, element)
}
return result
}
}
#else
extension SequenceType {
func reduce(@noescape combine: (Generator.Element, Generator.Element) throws -> Generator.Element) rethrows -> Generator.Element? {
var generator = generate()
guard var result = generator.next() else { return nil }
while let element = generator.next() {
result = try combine(result, element)
}
return result
}
}
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment