逃避关闭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 可能给我一个错误的错误。
我有一个关于闭包的问题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 可能给我一个错误的错误。