假设我有一系列函数:
lazy var funcArray = [firstFunc, secondFunc, thirdFunc, ....n+Func, ...Inifinit number of Func........]
您将如何以2.5秒的延迟为一个接一个地称它们?
我尝试没有成功的许多事情,包括此循环:
while n < funcArray.count {
funcArray[n]()
DispatchQueue.main.asyncAfter(deadline: .now() + 2.5) {
n = n +1
}
}
我编写小代码以更好地理解。
初始化计数和Functimer变量和创建的静态函数数组。
var count:Int = 0
var funcTimer = Timer()
let funcArray:Array = [somefunc(),somefunc(),somefunc()]
之后,将这些行添加到适当的位置
funcTimer = Timer.scheduledTimer(timeInterval: 2.5, target: self, selector: (#selector(ViewController.scheduleArrayFunctions)), userInfo: nil, repeats: true)
@objc func scheduleArrayFunctions(funcarray:[ String])
{
if count < self.funcArray.count {
//this if is interesting checking both static function when it check it call the somefunc method
if self.funcArray[count] == ViewController.somefunc(){
print("equel")
}
self.count += 1
}
else
{
funcTimer.invalidate()
}
}
func somefunc()
{
print("hello world")
}
希望这对您有用。
我认为这会起作用。按照以下步骤。
- 将变量计数声明为零。
- 安排时间间隔2.5的计时器,然后重复为true。
- 现在,从数组中调用索引的数组中的函数为计时器回调块中的计数。
- 检查计数是否小于array.count。
- 增加计数。
- 否则停止计时器。
我做了一个函数以函数循环可能编码不好,但是...它有效
n = 0
self.funcArray[n]()
n = n + 1
timerAction()
func timerAction() {
let when = DispatchTime.now() + 2.5
DispatchQueue.main.asyncAfter(deadline: when) {
self.funcArray[self.n]()
self.n = self.n + 1
if self.n < self.funcArray.count {
self.timerAction2()
}
}
}
func timerAction2() {
let when = DispatchTime.now() + 2.5
DispatchQueue.main.asyncAfter(deadline: when) {
self.funcArray[self.n]()
}
if self.n < self.funcArray.count {
self.timerAction()
}
}