итерация с использованием необязательного обработчика завершения, вызывающего себя, не завершится второй раз - PullRequest
0 голосов
/ 15 февраля 2019

Я получаю эту ошибку:

Значение необязательного типа '((RestTime) -> ())?'должен быть развернут в значение типа '(RestTime) -> ()'

Я вызываю функцию из VC:

        let calculateSegmentDirections = CalculateSegmentDirections(locationManager: locationManager)
        calculateSegmentDirections.calculateSegmentDirections(index, time: time, routes: routes, loc: loc) { restTime in
                print("4")

        }




    func calculateSegmentDirections(_ index: Int, time: TimeInterval, routes: [MKRoute], loc: LocationModel, completion: ((_ restTime: RestTime) -> ())?) {
            print("1")
            if let routeResponse = response?.routes {
            print("2")
                    self.calculateSegmentDirections(index+1, time: timeVar, routes: routesVar, loc: restLocation, completion: nil)
                } else {
                    let restTime = RestTime(objectID: restLocation.objectID, time: timeVar, routes: routesVar)
                    print("3")
                    completion(restTime)
                }
    }

Функция в полной форме вызываетсяиз VC, затем перебирает себя, чтобы создать маршрут из MKdirections.Мой вопрос, могу ли я использовать дополнительный обработчик завершения таким образом?

консоль печатает 1, 2, 1, 3, как ожидалось, но затем не вызывает завершение.4 никогда не увольняют.завершение = ноль, поэтому, когда я распаковываюсь, если завершение = завершение, оно не работает.

Кроме того, завершение? (restTime) не работает, равно как и установка по умолчанию на ноль, как при проверке с печатью(завершение) = ноль.

Догадывается, что происходит: обработчик первого завершения "завершает функцию", следовательно, второй не срабатывает?Я передаю нулевое значение, а не запускаю его?

Извинения, если это просто, Google пурпурный и все еще не уверен, что я делаю неправильно.

1 Ответ

0 голосов
/ 15 февраля 2019

Я думаю, что проблема заключается здесь:

// ... 
print("2")
self.calculateSegmentDirections(index+1, time: timeVar, 
         routes: routesVar, loc: restLocation, completion: nil)
// ...

Когда вы вызываете calculateSegmentDirections рекурсивно, вы не сдаете обработчик завершения, а nil.Это предназначено?На мой взгляд, это должно быть:

// ... 
print("2")
self.calculateSegmentDirections(index+1, time: timeVar, 
         routes: routesVar, loc: restLocation, completion: completion)
// ...
...