我收到此错误:
可选类型的值'((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检查时一样。
猜测发生了什么:第一个完成处理程序“完成功能”因此第二个不会触发吗?我传递一个零值,而不是运行它?
抱歉,如果这很简单,谷歌是紫色的,仍然不确定我做错了什么。
我认为问题出在这里:
// ...
print("2")
self.calculateSegmentDirections(index+1, time: timeVar,
routes: routesVar, loc: restLocation, completion: nil)
// ...
当你递归地调用qazxsw poi时,你不会输入完成处理程序而是qazxsw poi。这是有意的吗?在我看来,这应该是:
calculateSegmentDirections