Skip to content

Instantly share code, notes, and snippets.

@masakih
Created October 18, 2020 04:21
Show Gist options
  • Select an option

  • Save masakih/257c9109563c6fd0fa54ee7daaaea452 to your computer and use it in GitHub Desktop.

Select an option

Save masakih/257c9109563c6fd0fa54ee7daaaea452 to your computer and use it in GitHub Desktop.
できた #CodePiece
extension Sequence {
func traverse<T>(_ transform: @escaping (Element) -> AnyPublisher<T, Never>) -> AnyPublisher<[T], Never> {
var index = 0
return self
.publisher
.flatMap { i -> AnyPublisher<(Int, T), Never> in
defer { index += 1 }
let index = index
return Future<(Int, T), Never> { promise in
DispatchQueue.global().async {
let se = DispatchSemaphore(value: 1)
DispatchQueue(label: "AAAA").async {
_ = transform(i)
.sink { t in
promise(.success((index, t)))
se.signal()
}
}
se.wait()
}
}
.eraseToAnyPublisher()
}
.collect()
.map { $0.sorted { $0.0 < $1.0 } }
.map { $0.map { $0.1 } }
.eraseToAnyPublisher()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment