Swift 处理这种情况的方法而不是使用书籍

Swift's way to handle this situation instead of using bools

我有一个函数,如果当前不执行,我只想执行它。 我使用了一个 bool 变量来检查当前的执行。

是否有 Swift 提供的任何其他解决方案来处理此问题而不是使用 Bool?

 guard
        !isExecuting,
        let currentNavVC = tabBarController.selectedViewController as? UINavigationController
        else { return }
    
    isExecuting = true
    
    let first = currentNavVC.viewControllers.first,
    let last = currentNavVC.viewControllers.last
    var controllers = [first]
    if first != last {
        controllers = [first, last]
    }
    
    DispatchQueue.main.async {
        currentNavVC.viewControllers = controllers
        isExecuting = false
    }

布尔变量:isExecuting

注:

尝试使用信号量(DispatchSemaphore)但它们没有帮助。
我也在 didReceiveMemoryWarning()

中调用上述函数 我们将不胜感激并提前致谢!!

I have a function that I want only to execute if not executing currently

您正在寻找 。但是他们自己的锁是棘手和危险的。获得锁的简单、安全的方法是使用串行队列。正如我们所说,串行队列是锁的一种形式。所以:

  • 如果你的函数在主队列上被调用,那么它不能执行,如果它正在执行,并且没有什么可做的。主队列是串行队列,只能有一个。

  • 如果您的函数是在后台队列上调用的,请确保您的队列是串行队列。比如你自己创建DispatchQueue,默认是串行的

我相信在这种情况下您也可以使用 OperationOperationQueue

Operation支持取消以及检查是否正在执行。

参考:

操作队列:https://developer.apple.com/documentation/foundation/operationqueue

操作:https://developer.apple.com/documentation/foundation/operation