Swift处理这种情况的方式,而不是使用bools

问题描述 投票:0回答:1

我有一个仅在当前不执行时才想执行的功能。我已经使用了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
    }

Bool变量:isExecuting

注意:

尝试使用信号量(DispatchSemaphore),但它们没有帮助。我也在didReceiveMemoryWarning()中调用上述函数任何帮助将不胜感激,并预先感谢!

ios swift cocoa-touch boolean
1个回答
2
投票

我有一个仅在当前不执行时才想执行的功能

您正在寻找一个。但是锁本身是棘手且危险的。获得锁的简单,安全的方法是使用串行队列。正如我们所说,串行队列是一种锁定形式。因此:

  • 如果在主队列上调用了函数,则如果当前正在执行,则它无法执行,并且没有任何事要做。主队列是一个串行队列,只能有一个。

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

© www.soinside.com 2019 - 2024. All rights reserved.