使用可选的完成处理程序调用自身迭代,不会第二次完成

问题描述 投票:0回答:1

我收到此错误:

可选类型的值'((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)也不起作用,也没有将默认值设置为nil,就像我用print(完成)= nil检查时一样。

猜测发生了什么:第一个完成处理程序“完成功能”因此第二个不会触发吗?我传递一个零值,而不是运行它?

抱歉,如果这很简单,谷歌是紫色的,仍然不确定我做错了什么。

swift completionhandler
1个回答
1
投票

我认为问题出在这里:

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

当你递归地调用qazxsw poi时,你不会输入完成处理程序而是qazxsw poi。这是有意的吗?在我看来,这应该是:

calculateSegmentDirections
© www.soinside.com 2019 - 2024. All rights reserved.