Как вернуть значение из обработчика завершения (особый случай)? - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь настроить Mapbox для навигации в приложении на SwiftUI. Прямо сейчас viewController возвращает ноль. Я посмотрел на другие ответы на этот вопрос, и большинство из них рекомендуют добавить другой обработчик завершения в функцию, где происходит обратный вызов. Вот код:

 func makeUIViewController(context: Context) -> NavigationViewController {
    getRoute { route in
           let viewController = NavigationViewController(for: route as! Route)
           viewController.modalPresentationStyle = .fullScreen
    }
    //Use of unresolved identifier viewController
    return viewController
}

Добавление замыкания к этой функции дает мне ошибку:

Тип 'NavView' не соответствует протоколу 'UIViewControllerRepresentable'

Помимо добавления замыкания к функции, что еще я могу сделать, чтобы получить значение из getRoute {}?

Вот остаток кода:

struct NavView: UIViewControllerRepresentable{

typealias CompletionHandler = (Any) -> Void

func makeUIViewController(context: Context) -> NavigationViewController {
    getRoute { route in
           let viewController = NavigationViewController(for: route as! Route)
           viewController.modalPresentationStyle = .fullScreen
    }
    //Use of unresolved identifier viewController
    return viewController
}

func updateUIViewController(_ uiView: NavigationViewController, context: Context) {

}

func getRoute(_ completionHandler: @escaping CompletionHandler){
       // Define two waypoints to travel between
       let origin = Waypoint(coordinate: CLLocationCoordinate2D(latitude: 38.9131752, longitude: -77.0324047), name: "Mapbox")
       let destination = Waypoint(coordinate: CLLocationCoordinate2D(latitude: 38.8977, longitude: -77.0365), name: "White House")

       // Set options
       let options = NavigationRouteOptions(waypoints: [origin, destination])

       // Request a route using MapboxDirections.swift
       Directions.shared.calculate(options) { (waypoints, routes, error) in
          guard let route = routes?.first else { return }
          completionHandler(route)
       }
}
...