Last active
August 29, 2015 14:04
-
-
Save drewag/711475d9e0013e9c35ff to your computer and use it in GitHub Desktop.
Swift Challenge #2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct TakeWhileGenerator<T: GeneratorType>: GeneratorType { | |
typealias Element = T.Element | |
var generator: T | |
let test: (element: T.Element) -> Bool | |
mutating func next() -> Element? { | |
if let next = generator.next() { | |
if test(element: next) { | |
return next | |
} | |
} | |
return nil | |
} | |
} | |
struct TakeWhile<T : SequenceType>: SequenceType { | |
typealias Generator = TakeWhileGenerator<T.Generator> | |
let seq: T | |
let test: (element: T.Generator.Element) -> Bool | |
init(_ seq: T, test: (element: T.Generator.Element) -> Bool) { | |
self.seq = seq | |
self.test = test | |
} | |
func generate() -> Generator { | |
return Generator(generator: self.seq.generate(), test: self.test) | |
} | |
} | |
let array = [1,2,3,2,1] | |
Array(TakeWhile(array, {$0 < 3})) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment