我有一节课看起来有点像:

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
}

10-07 19:49
查看更多