ios - 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() 中调用上述函数
任何帮助将不胜感激并提前感谢!
解决方案
我有一个功能,如果当前不执行,我只想执行
你在找一把锁。但是自己的锁是棘手和危险的。获得锁的简单、安全的方法是使用串行队列。正如我们所说,串行队列是一种锁。所以:
如果你的函数在主队列上被调用,那么如果它当前正在执行,它就无法执行,并且没有什么可做的。主队列是一个串行队列,只能有一个。
如果您的函数在后台队列上调用,请确保您的队列是串行队列。例如,如果您创建自己的 DispatchQueue,则默认为串行。
推荐阅读
- php - 函数 create_function() 在 WP-Filebase 上已弃用
- typo3 - TYPO3 fileadmin 目录显示浏览器中所有页面的所有文件
- javascript - 如何将事件侦听器添加到单选按钮 - 地雷未触发
- adaptive-cards - Action.ShowCard 默认打开
- c - C编程,使用报警
- php - Laravel foreach 似乎停在了第一条记录上
- javascript - HTML5 中的拖放操作
- c++ - 如何在不使用委托的情况下在 QML 中显示模型数据
- c# - 检测到.Net Core 3.0 可能的对象循环,但不支持
- powershell - Get-ADUser - 从 SZ 中过滤姓氏,以反向 alpha 顺序列出