Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class DataManager {
- func fetchRoutes(placemarks: [MKPlacemark], placemark: MKPlacemark, completeBlock: @escaping ([DirectionsModel])->()) {
- let queue = OperationQueue()
- queue.name = "Fetch Routes"
- var directionsModels = [DirectionsModel]()
- if placemarks.count == 0 {
- completeBlock(directionsModels)
- return
- }
- let callbackFinishOperation = BlockOperation {
- print("completeBlock")
- completeBlock(directionsModels)
- }
- for oldPlacemark in placemarks {
- for tuple in [(oldPlacemark, placemark), (placemark, oldPlacemark)] {
- let source = tuple.0
- let destination = tuple.1
- CountdownManager.shared.countTimes += 1
- let blockOperation = BlockOperation(block: {
- let semaphore = DispatchSemaphore(value: 0)
- print("calculate")
- MapMananger.calculateDirections(from: source, to: destination, completion: { (status) in
- switch status {
- case .success(let response):
- let directions = DirectionsModel(source: source, destination: destination, routes: response.routes)
- directionsModels.append(directions)
- print(directions)
- case .failure(let error):
- print(error)
- }
- print("semaphore.signal")
- semaphore.signal()
- })
- print("semaphore.wait")
- semaphore.wait()
- print("over")
- })
- print("queue.addOperation")
- callbackFinishOperation.addDependency(blockOperation)
- queue.addOperation(blockOperation)
- }
- }
- print("waitUntilAllOperationsAreFinished")
- queue.addOperation(callbackFinishOperation)
- queue.waitUntilAllOperationsAreFinished()
- }
- }
- class MapMananger {
- enum DirectResponseStatus {
- case success(MKDirectionsResponse)
- case failure(Error)
- }
- class func calculateDirections(from source: MKPlacemark, to destination: MKPlacemark, completion: @escaping (_ status: DirectResponseStatus) -> ()) {
- let request = MKDirectionsRequest()
- request.source = source.toMapItem
- request.destination = destination.toMapItem
- request.transportType = .automobile
- print("MKDirectionsRequest")
- let directions = MKDirections(request: request)
- print("MKDirections")
- directions.calculate { (response, error) in
- if let response = response {
- completion(.success(response))
- }
- if let error = error {
- completion(.failure(error))
- }
- }
- }
Add Comment
Please, Sign In to add comment