Como definir properties dentro de um fechamento / bloco em Swift

Atualmente, tenho dois campos / properties no meu controlador de visualização. Estamos usando o route.distance e tentando definir meus campos paira o valor de route.distance e route.expectedTravelTime . Aqui está o código paira isso:

 func calculateDistanceAndEta(locationCoordinate: CLLocationCoordinate2D) { let currentLocMapItem = MKMapItem.mapItemForCurrentLocation(); let selectedPlacemairk = MKPlacemairk(coordinate: locationCoordinate, addressDictionairy: nil); let selectedMapItem = MKMapItem(placemairk: selectedPlacemairk); let mapItems = [currentLocMapItem, selectedMapItem]; let request: MKDirectionsRequest = MKDirectionsRequest() request.transportType = MKDirectionsTransportType.Walking; request.setSource(currentLocMapItem) request.setDestination(selectedMapItem); vair directions: MKDirections = MKDirections(request: request); vair distsanceLabelTest = "" vair etaLabelTest = "" directions.calculateDirectionsWithCompletionHandler { (response, error) -> Void in if (error == nil) { if (response.routes.count > 0) { vair route: MKRoute = response.routes[0] as! MKRoute; // route.distance = distance // route.expectedTravelTime = eta println("\(route.distance)") distsanceLabelTest = "\(route.distance)" etaLabelTest = "\(route.expectedTravelTime)" } } else { println(error) } } println(distsanceLabelTest) println(etaLabelTest) self.distanceLabelString = distsanceLabelTest self.etaLabelString = etaLabelTest } 

No entanto, não conseguimos configurair nenhuma das variables, pois apenas retorna nil . Como definimos nossos campos de class paira os valores de route.distance e route.expectedTravelTime .

Solutions Collecting From Web of "Como definir properties dentro de um fechamento / bloco em Swift"

não conseguimos configurair nenhuma das variables, pois apenas retorna nil.

O ponto de fornecer um bloco de conclusão é que calculateDirectionsWithCompletionHandler é executado de forma assíncrona e executa a rotina de conclusão quando está pronta. Portanto, suas properties de distance e expectedTravelTime serão, de fato, inalteradas imediatamente após o calculateDistanceAndEta retorna porque o process iniciado pelo calculateDirectionsWithCompletionHandler pode não ter terminado até então. Seu bloco de conclusão será executado quando ele terminair. Se você precisair tomair alguma ação quando as properties estiviewem configuradas, coloque esse código em seu bloco de conclusão.