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,默认是串行的
我相信在这种情况下您也可以使用 Operation
和 OperationQueue
。
Operation
支持取消以及检查是否正在执行。
参考:
操作队列:https://developer.apple.com/documentation/foundation/operationqueue
操作:https://developer.apple.com/documentation/foundation/operation
我有一个函数,如果当前不执行,我只想执行它。 我使用了一个 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,默认是串行的
我相信在这种情况下您也可以使用 Operation
和 OperationQueue
。
Operation
支持取消以及检查是否正在执行。
参考:
操作队列:https://developer.apple.com/documentation/foundation/operationqueue
操作:https://developer.apple.com/documentation/foundation/operation