如何在Swift 3.1中只调用一次函数?

时间:2017-07-06 20:55:52

标签: swift grand-central-dispatch

我的课程看起来有点像:

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兼容的方法?

2 个答案:

答案 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