【发布时间】:2017-07-19 23:27:23
【问题描述】:
我目前有一组异步函数,它们都在viewDidLoad() 中调用。每个函数的末尾是一个布尔值,在函数完成后从 false 设置为 true。还有一个条件语句检查触发第三个函数的两个函数的布尔值。这个条件语句在两个函数中(我想在两个函数中 both 都完成时调用)。一般:
var checkOne = false
var checkTwo = false
func functionOne(){
//async stuff
checkOne = true
if checkOne == true && checkTwo == true{
functionThree()//will only run if both functionOne and functionTwo have been completed
}
}
func functionTwo(){
//async stuff
checkTwo = true
if checkOne == true && checkTwo == true{
functionThree()//will only run if both functionOne and functionTwo have been completed
}
}
func functionThree(){
//stuff
}
override func viewDidLoad() {
functionOne()
functionTwo()
}
此设置确保 functionThree() 只能在 functionOne 和 functionTwo 都完成时运行。如果functionOne 在functionTwo() 之前完成它的异步操作并达到触发functionThree() 的条件,它不会这样做,因为checkTwo 还没有变为真。因此,当functionTwo() 的异步工作完成时,它将触发functionThree()。这可以正常工作,并且一次没有引起问题。不过,我要明确避免的是异步函数恰好完成,因此同时调用functionThree(),准确。为此,我想设置一个NSLock(),但是,尽管查找了文档,但我对如何执行此操作的线索为零,因为我需要由两个不同的函数处理相同的锁。有人有什么想法吗?
【问题讨论】:
标签: swift asynchronous nslock