首页 > 解决方案 > Swift 处理这种情况的方法而不是使用布尔值

问题描述

我有一个函数,如果当前不执行,我只想执行。我使用了一个 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() 中调用上述函数

任何帮助将不胜感激并提前感谢!

标签: iosswiftcocoa-touchboolean

解决方案


我有一个功能,如果当前不执行,我只想执行

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

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

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


推荐阅读