我的课程看起来有点像:
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兼容的方法?
答案 0 :(得分: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
}
答案 1 :(得分:0)
我不能很好地理解这个要求,以便编写完全满足您需求的示例代码,但一般来说,您可以考虑使用dispatch_once
作为文档here。