我有一节课看起来有点像:
final class Token {
..........
public enum Result {
case Success()
case Failure(Error)
}
private var successClosure : (() -> Void)?
private var failureClosure : ((Error) -> Void)?
public func completed(withResult result: Token.Result) {
switch result {
case .Success: successClosure?()
case .Failure(let error): failureClosure?(error)
}
}
..........
}
我想强制执行只调用一次
completed(withResult:)
的功能。是否有将上述
completed(withResult:)
方法转换为与Swift 3.1兼容的方法? 最佳答案
您可以声明一个布尔变量,当函数被调用一次时,该变量将变为false
。
fileprivate var firstCompletionTime = true
public func completed(withResult result: Token.Result) {
guard firstCompletionTime else {
return
}
switch result {
case .Success: successClosure?()
case .Failure(let error): failureClosure?(error)
}
firstCompletionTime = false
}