Skip to content

Instantly share code, notes, and snippets.

@gfontenot
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gfontenot/851ff176ef69edf3f416 to your computer and use it in GitHub Desktop.
Save gfontenot/851ff176ef69edf3f416 to your computer and use it in GitHub Desktop.
import Foundation
class DispatchGroup {
private var blocks: [dispatch_block_t] = []
private let dispatch_queue = dispatch_queue_create("com.dispatch_group.foo", DISPATCH_QUEUE_CONCURRENT)
private let dispatch_group = dispatch_group_create()
func andThen(block: dispatch_block_t) -> Group {
blocks += [block]
return self
}
func noAndThen(completion: dispatch_block_t) -> Group {
for block in blocks {
dispatch_group_async(dispatch_group, dispatch_queue, block)
}
dispatch_group_notify(dispatch_group, dispatch_queue, completion)
return self
}
}
let foo = Group()
for i in 1...10 {
foo.andThen { println(i) }
}
foo.andThen {
println("foo")
}.andThen {
println("bar")
}.andThen {
println("baz")
}.noAndThen {
println("completion")
}
// ❯ ./group.swift
// 51426
//
// 3
// 7
//
// 891
//
// fbb
//
// 0oaa
// orz
//
//
// completion
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment