逃避关闭swift3

Escaping closure swift3

我有一个关于闭包的问题escaping.The闭包被定义为转义,但不知何故编译器总是给出错误。

我得到的错误是

Closure use of non-escaping parameter 'completion' may allow it to escape.

我也提到了我出错的地方。

以下是定义闭包的代码。

final internal class AnimationTemplate {

var  template: ((CompletionFunc) -> AnimationFunc)

init(template:  @escaping (CompletionFunc) -> AnimationFunc)
{
    self.template = template
}

func perform(with completion: CompletionFunc) { template(completion)() }
}

internal typealias CompletionFunc =  (( Bool) -> Void)

internal typealias AnimationFunc = (() -> Void)

现在用在这里

AnimationQueue.shared.enqueue(animation: AnimationTemplate { completion in

  //Error here
  //Closure use of non-escaping parameter 'completion' may allow it to escape
  return {

     (0 ..< self.placeholderViews.count).forEach {

      let current: PasscodeSignPlaceholderView = self.placeholderViews[[=11=]]

      let state: PasscodeSignPlaceholderView.State = [=11=] < inputLength ? .active : .inactive

      //Error here
      //Closure use of non-escaping parameter 'completion' may allow it to escape
      current.setState(to: state, with: completion)
    }
  }
})

我已经看到很多关于这个错误问题的其他问题,但 none 似乎解决了我的问题 problem.Any 帮助会很大 appreciated.Thanks

使闭包可选解决了 issue.It 是最终的成功和试验。

 internal typealias CompletionFunc =  (( Bool) -> Void)?

我看到这个闭包被传递给一个函数,它接受一个可选的 closure.Then 我决定让它成为可选的 optional.When 我让它成为可选的错误消失了。 xcode 可能给我一个错误的错误。