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

时间:2019-02-15 12:41:22

标签: swift completionhandler

我收到此错误:

  

可选类型'(((RestTime)->())?必须解压缩为'(RestTime)->()'类型的值

我从VC调用函数:

let str: String = "\u{0D85}"

for scalar in str.unicodeScalars {
    print(scalar.value)
}

/*
 prints: 3461
 */

从VC调用完整形式的函数,然后对其进行迭代以从MK方向创建路由。我的问题是,我可以通过这种方式使用可选的完成处理程序吗?

控制台会像预期的那样打印1,2,1,3,但不会调用完成。 4永远不会被解雇。完成=零,所以当我解开如果完成=完成它是行不通的。

另外,完成?(restTime)也不起作用,也不将默认值设置为nil,就像我用print(completion)= nil进行检查时一样。

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

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

1 个答案:

答案 0 :(得分:1)

我认为问题出在这里:

// ... 
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)
// ...